mirror of
https://github.com/libretro/RetroArch
synced 2025-02-07 03:40:24 +00:00
(D3D) Move code around
This commit is contained in:
parent
dabfafc7cc
commit
7599caac81
110
gfx/d3d9/d3d.cpp
110
gfx/d3d9/d3d.cpp
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user