(D3D) Move code around

This commit is contained in:
twinaphex 2014-03-08 04:08:18 +01:00
parent dabfafc7cc
commit 7599caac81
2 changed files with 111 additions and 110 deletions

View File

@ -17,7 +17,7 @@
#include "d3d9.hpp"
#include "render_chain.hpp"
#include "../../file.h"
#include "../gfx_common.h"
#ifndef _XBOX
@ -224,6 +224,114 @@ bool d3d_init_chain(void *data, const video_info_t *video_info)
return true;
}
#ifdef HAVE_FBO
bool d3d_init_multipass(void *data)
{
d3d_video_t *d3d = (d3d_video_t*)data;
config_file_t *conf = config_file_new(d3d->cg_shader.c_str());
if (!conf)
{
RARCH_ERR("Failed to load preset.\n");
return false;
}
memset(&d3d->shader, 0, sizeof(d3d->shader));
if (!gfx_shader_read_conf_cgp(conf, &d3d->shader))
{
config_file_free(conf);
RARCH_ERR("Failed to parse CGP file.\n");
return false;
}
config_file_free(conf);
gfx_shader_resolve_relative(&d3d->shader, d3d->cg_shader.c_str());
RARCH_LOG("[D3D9 Meta-Cg] Found %d shaders.\n", d3d->shader.passes);
for (unsigned i = 0; i < d3d->shader.passes; i++)
{
if (!d3d->shader.pass[i].fbo.valid)
{
d3d->shader.pass[i].fbo.scale_x = d3d->shader.pass[i].fbo.scale_y = 1.0f;
d3d->shader.pass[i].fbo.type_x = d3d->shader.pass[i].fbo.type_y = RARCH_SCALE_INPUT;
}
}
bool use_extra_pass = d3d->shader.passes < GFX_MAX_SHADERS && d3d->shader.pass[d3d->shader.passes - 1].fbo.valid;
if (use_extra_pass)
{
d3d->shader.passes++;
gfx_shader_pass &dummy_pass = d3d->shader.pass[d3d->shader.passes - 1];
dummy_pass.fbo.scale_x = dummy_pass.fbo.scale_y = 1.0f;
dummy_pass.fbo.type_x = dummy_pass.fbo.type_y = RARCH_SCALE_VIEWPORT;
dummy_pass.filter = RARCH_FILTER_UNSPEC;
}
else
{
gfx_shader_pass &pass = d3d->shader.pass[d3d->shader.passes - 1];
pass.fbo.scale_x = pass.fbo.scale_y = 1.0f;
pass.fbo.type_x = pass.fbo.type_y = RARCH_SCALE_VIEWPORT;
}
return true;
}
#endif
void d3d_set_font_rect(void *data, font_params_t *params)
{
d3d_video_t *d3d = (d3d_video_t*)data;
float pos_x = g_settings.video.msg_pos_x;
float pos_y = g_settings.video.msg_pos_y;
float font_size = g_settings.video.font_size;
if (params)
{
pos_x = params->x;
pos_y = params->y;
font_size *= params->scale;
}
d3d->font_rect.left = d3d->final_viewport.X + d3d->final_viewport.Width * pos_x;
d3d->font_rect.right = d3d->final_viewport.X + d3d->final_viewport.Width;
d3d->font_rect.top = d3d->final_viewport.Y + (1.0f - pos_y) * d3d->final_viewport.Height - font_size;
d3d->font_rect.bottom = d3d->final_viewport.Height;
d3d->font_rect_shifted = d3d->font_rect;
d3d->font_rect_shifted.left -= 2;
d3d->font_rect_shifted.right -= 2;
d3d->font_rect_shifted.top += 2;
d3d->font_rect_shifted.bottom += 2;
}
bool d3d_init_singlepass(void *data)
{
d3d_video_t *d3d = (d3d_video_t*)data;
memset(&d3d->shader, 0, sizeof(d3d->shader));
d3d->shader.passes = 1;
gfx_shader_pass &pass = d3d->shader.pass[0];
pass.fbo.valid = true;
pass.fbo.scale_x = pass.fbo.scale_y = 1.0;
pass.fbo.type_x = pass.fbo.type_y = RARCH_SCALE_VIEWPORT;
strlcpy(pass.source.cg, d3d->cg_shader.c_str(), sizeof(pass.source.cg));
return true;
}
bool d3d_process_shader(void *data)
{
d3d_video_t *d3d = (d3d_video_t*)data;
#ifdef HAVE_FBO
if (strcmp(path_get_extension(d3d->cg_shader.c_str()), "cgp") == 0)
return d3d_init_multipass(d3d);
#endif
return d3d_init_singlepass(d3d);
}
bool d3d_init_luts(void *data)
{
d3d_video_t *d3d = (d3d_video_t*)data;

View File

@ -16,7 +16,6 @@
*/
#include "d3d9.hpp"
#include "../../file.h"
#include "../context/win32_common.h"
#ifdef _MSC_VER
@ -36,6 +35,7 @@ extern bool d3d_restore(void *data);
static void d3d_resize(unsigned new_width, unsigned new_height)
{
#ifndef _XBOX
d3d_video_t *d3d = (d3d_video_t*)curD3D;
LPDIRECT3DDEVICE d3dr = (LPDIRECT3DDEVICE)d3d->dev;
if (!d3dr)
@ -49,6 +49,7 @@ static void d3d_resize(unsigned new_width, unsigned new_height)
d3d->video_info.height = d3d->screen_height = new_height;
d3d_restore(d3d);
}
#endif
}
#ifdef HAVE_WINDOW
@ -88,17 +89,6 @@ LRESULT CALLBACK WindowProc(HWND hWnd, UINT message,
}
#endif
bool d3d_process_shader(void *data)
{
d3d_video_t *d3d = (d3d_video_t*)data;
#ifdef HAVE_FBO
if (strcmp(path_get_extension(d3d->cg_shader.c_str()), "cgp") == 0)
return d3d_init_multipass(d3d);
#endif
return d3d_init_singlepass(d3d);
}
static void gfx_ctx_d3d_swap_buffers(void)
{
d3d_video_t *d3d = (d3d_video_t*)driver.video_data;
@ -145,103 +135,6 @@ static void gfx_ctx_d3d_update_title(void)
g_extern.frame_count++;
}
void d3d_set_font_rect(void *data, font_params_t *params)
{
d3d_video_t *d3d = (d3d_video_t*)data;
float pos_x = g_settings.video.msg_pos_x;
float pos_y = g_settings.video.msg_pos_y;
float font_size = g_settings.video.font_size;
if (params)
{
pos_x = params->x;
pos_y = params->y;
font_size *= params->scale;
}
d3d->font_rect.left = d3d->final_viewport.X + d3d->final_viewport.Width * pos_x;
d3d->font_rect.right = d3d->final_viewport.X + d3d->final_viewport.Width;
d3d->font_rect.top = d3d->final_viewport.Y + (1.0f - pos_y) * d3d->final_viewport.Height - font_size;
d3d->font_rect.bottom = d3d->final_viewport.Height;
d3d->font_rect_shifted = d3d->font_rect;
d3d->font_rect_shifted.left -= 2;
d3d->font_rect_shifted.right -= 2;
d3d->font_rect_shifted.top += 2;
d3d->font_rect_shifted.bottom += 2;
}
bool d3d_init_singlepass(void *data)
{
d3d_video_t *d3d = (d3d_video_t*)data;
memset(&d3d->shader, 0, sizeof(d3d->shader));
d3d->shader.passes = 1;
gfx_shader_pass &pass = d3d->shader.pass[0];
pass.fbo.valid = true;
pass.fbo.scale_x = pass.fbo.scale_y = 1.0;
pass.fbo.type_x = pass.fbo.type_y = RARCH_SCALE_VIEWPORT;
strlcpy(pass.source.cg, d3d->cg_shader.c_str(), sizeof(pass.source.cg));
return true;
}
#ifdef HAVE_FBO
bool d3d_init_multipass(void *data)
{
d3d_video_t *d3d = (d3d_video_t*)data;
config_file_t *conf = config_file_new(d3d->cg_shader.c_str());
if (!conf)
{
RARCH_ERR("Failed to load preset.\n");
return false;
}
memset(&d3d->shader, 0, sizeof(d3d->shader));
if (!gfx_shader_read_conf_cgp(conf, &d3d->shader))
{
config_file_free(conf);
RARCH_ERR("Failed to parse CGP file.\n");
return false;
}
config_file_free(conf);
gfx_shader_resolve_relative(&d3d->shader, d3d->cg_shader.c_str());
RARCH_LOG("[D3D9 Meta-Cg] Found %d shaders.\n", d3d->shader.passes);
for (unsigned i = 0; i < d3d->shader.passes; i++)
{
if (!d3d->shader.pass[i].fbo.valid)
{
d3d->shader.pass[i].fbo.scale_x = d3d->shader.pass[i].fbo.scale_y = 1.0f;
d3d->shader.pass[i].fbo.type_x = d3d->shader.pass[i].fbo.type_y = RARCH_SCALE_INPUT;
}
}
bool use_extra_pass = d3d->shader.passes < GFX_MAX_SHADERS && d3d->shader.pass[d3d->shader.passes - 1].fbo.valid;
if (use_extra_pass)
{
d3d->shader.passes++;
gfx_shader_pass &dummy_pass = d3d->shader.pass[d3d->shader.passes - 1];
dummy_pass.fbo.scale_x = dummy_pass.fbo.scale_y = 1.0f;
dummy_pass.fbo.type_x = dummy_pass.fbo.type_y = RARCH_SCALE_VIEWPORT;
dummy_pass.filter = RARCH_FILTER_UNSPEC;
}
else
{
gfx_shader_pass &pass = d3d->shader.pass[d3d->shader.passes - 1];
pass.fbo.scale_x = pass.fbo.scale_y = 1.0f;
pass.fbo.type_x = pass.fbo.type_y = RARCH_SCALE_VIEWPORT;
}
return true;
}
#endif
static void gfx_ctx_d3d_show_mouse(bool state)
{
#ifdef HAVE_WINDOW