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;
unsigned width, height;
video_shader_ctx_scale_t scaler;
struct gfx_fbo_scale scale, scale_last;
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_shader_driver_scale(1, &scale);
video_shader_driver_scale(video_shader_driver_num_shaders(), &scale_last);
scaler.idx = 1;
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 */
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++)
{
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)
{

View File

@ -69,17 +69,6 @@ struct video_shader *video_shader_driver_get_current_shader(void)
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)
{
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,
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:
default:
break;

View File

@ -63,7 +63,8 @@ enum video_shader_driver_ctl_state
SHADER_CTL_SET_PARAMS,
SHADER_CTL_GET_FEEDBACK_PASS,
SHADER_CTL_MIPMAP_INPUT,
SHADER_CTL_SET_COORDS
SHADER_CTL_SET_COORDS,
SHADER_CTL_SCALE
};
typedef struct shader_backend
@ -132,13 +133,17 @@ typedef struct video_shader_ctx_coords
const void *data;
} 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 hlsl_backend;
extern const shader_backend_t gl_cg_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:
* @ident : Identifier of shader context driver to find.