Create SHADER_CTL_SCALE

This commit is contained in:
twinaphex 2016-02-14 19:21:54 +01:00
parent 47cf62cdbd
commit cdd6684bb9
3 changed files with 36 additions and 17 deletions

View File

@ -656,6 +656,7 @@ static void gl_init_fbo(gl_t *gl, unsigned fbo_width, unsigned fbo_height)
{ {
int i; int i;
unsigned width, height; unsigned width, height;
video_shader_ctx_scale_t scaler;
struct gfx_fbo_scale scale, scale_last; struct gfx_fbo_scale scale, scale_last;
if (!gl || video_shader_driver_num_shaders() == 0) if (!gl || video_shader_driver_num_shaders() == 0)
@ -663,8 +664,15 @@ static void gl_init_fbo(gl_t *gl, unsigned fbo_width, unsigned fbo_height)
video_driver_get_size(&width, &height); video_driver_get_size(&width, &height);
video_shader_driver_scale(1, &scale); scaler.idx = 1;
video_shader_driver_scale(video_shader_driver_num_shaders(), &scale_last); scaler.scale = &scale;
video_shader_driver_ctl(SHADER_CTL_SCALE, &scaler);
scaler.idx = video_shader_driver_num_shaders();
scaler.scale = &scale_last;
video_shader_driver_ctl(SHADER_CTL_SCALE, &scaler);
/* we always want FBO to be at least initialized on startup for consoles */ /* we always want FBO to be at least initialized on startup for consoles */
if (video_shader_driver_num_shaders() == 1 && !scale.valid) if (video_shader_driver_num_shaders() == 1 && !scale.valid)
@ -692,7 +700,10 @@ static void gl_init_fbo(gl_t *gl, unsigned fbo_width, unsigned fbo_height)
for (i = 1; i < gl->fbo_pass; i++) for (i = 1; i < gl->fbo_pass; i++)
{ {
video_shader_driver_scale(i + 1, &gl->fbo_scale[i]); scaler.idx = i + 1;
scaler.scale = &gl->fbo_scale[i];
video_shader_driver_ctl(SHADER_CTL_SCALE, &scaler);
if (!gl->fbo_scale[i].valid) if (!gl->fbo_scale[i].valid)
{ {

View File

@ -69,17 +69,6 @@ struct video_shader *video_shader_driver_get_current_shader(void)
return video_poke->get_current_shader(video_driver); return video_poke->get_current_shader(video_driver);
} }
void video_shader_driver_scale(unsigned idx, struct gfx_fbo_scale *scale)
{
if (!scale || !current_shader)
return;
scale->valid = false;
if (current_shader->shader_scale)
current_shader->shader_scale(shader_data, idx, scale);
}
void video_shader_driver_use(void *data, unsigned index) void video_shader_driver_use(void *data, unsigned index)
{ {
if (!current_shader) if (!current_shader)
@ -222,6 +211,20 @@ bool video_shader_driver_ctl(enum video_shader_driver_ctl_state state, void *dat
return current_shader->set_coords(coords->handle_data, return current_shader->set_coords(coords->handle_data,
shader_data, coords->data); shader_data, coords->data);
} }
case SHADER_CTL_SCALE:
{
video_shader_ctx_scale_t *scaler = (video_shader_ctx_scale_t*)data;
if (!scaler || !scaler->scale)
return false;
scaler->scale->valid = false;
if (!current_shader || !current_shader->shader_scale)
return false;
current_shader->shader_scale(shader_data, scaler->idx, scaler->scale);
}
break;
case SHADER_CTL_NONE: case SHADER_CTL_NONE:
default: default:
break; break;

View File

@ -63,7 +63,8 @@ enum video_shader_driver_ctl_state
SHADER_CTL_SET_PARAMS, SHADER_CTL_SET_PARAMS,
SHADER_CTL_GET_FEEDBACK_PASS, SHADER_CTL_GET_FEEDBACK_PASS,
SHADER_CTL_MIPMAP_INPUT, SHADER_CTL_MIPMAP_INPUT,
SHADER_CTL_SET_COORDS SHADER_CTL_SET_COORDS,
SHADER_CTL_SCALE
}; };
typedef struct shader_backend typedef struct shader_backend
@ -132,13 +133,17 @@ typedef struct video_shader_ctx_coords
const void *data; const void *data;
} video_shader_ctx_coords_t; } video_shader_ctx_coords_t;
typedef struct video_shader_ctx_scale
{
unsigned idx;
struct gfx_fbo_scale *scale;
} video_shader_ctx_scale_t;
extern const shader_backend_t gl_glsl_backend; extern const shader_backend_t gl_glsl_backend;
extern const shader_backend_t hlsl_backend; extern const shader_backend_t hlsl_backend;
extern const shader_backend_t gl_cg_backend; extern const shader_backend_t gl_cg_backend;
extern const shader_backend_t shader_null_backend; extern const shader_backend_t shader_null_backend;
void video_shader_driver_scale(unsigned idx, struct gfx_fbo_scale *scale);
/** /**
* shader_ctx_find_driver: * shader_ctx_find_driver:
* @ident : Identifier of shader context driver to find. * @ident : Identifier of shader context driver to find.