Create SHADER_CTL_SCALE
This commit is contained in:
parent
47cf62cdbd
commit
cdd6684bb9
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue