diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 97e2ccc6a5..1041007970 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -1099,24 +1099,17 @@ static void gl2_renderchain_init( video_driver_get_size(&width, &height); - scale.valid = false; - scaler.idx = 1; - scaler.scale = &scale; + scaler.idx = 1; + scaler.scale = &scale; - if (gl->shader->shader_scale) - gl->shader->shader_scale(gl->shader_data, - 1, scaler.scale); + video_shader_driver_scale(&scaler); - scale_last.valid = false; - scaler.idx = shader_info.num; - scaler.scale = &scale_last; + scaler.idx = shader_info.num; + scaler.scale = &scale_last; - if (gl->shader->shader_scale) - gl->shader->shader_scale(gl->shader_data, - shader_info.num, scaler.scale); + video_shader_driver_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 (shader_info.num == 1 && !scale.valid) return; @@ -1142,13 +1135,10 @@ static void gl2_renderchain_init( for (i = 1; i < chain->fbo_pass; i++) { - chain->fbo_scale[i].valid = false; - scaler.idx = i + 1; - scaler.scale = &chain->fbo_scale[i]; + scaler.idx = i + 1; + scaler.scale = &chain->fbo_scale[i]; - if (gl->shader->shader_scale) - gl->shader->shader_scale(gl->shader_data, - i + 1, scaler.scale); + video_shader_driver_scale(&scaler); if (!chain->fbo_scale[i].valid) { diff --git a/gfx/video_driver.c b/gfx/video_driver.c index 7dfa0874ad..0e012e3c76 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -3502,6 +3502,13 @@ static bool video_driver_cb_set_mvp(void *data, return true; } +static void video_shader_driver_scale_null(void *data, + unsigned idx, struct gfx_fbo_scale *scale) +{ + (void)idx; + (void)scale; +} + static void video_shader_driver_reset_to_defaults(void) { if (!current_shader) @@ -3516,6 +3523,9 @@ static void video_shader_driver_reset_to_defaults(void) } if (!current_shader->set_coords) current_shader->set_coords = video_driver_cb_set_coords; + + if (!current_shader->shader_scale) + current_shader->shader_scale = video_shader_driver_scale_null; } /* Finds first suitable shader context driver. */ @@ -3562,6 +3572,18 @@ bool video_shader_driver_init(video_shader_ctx_init_t *init) return true; } +bool video_shader_driver_scale(video_shader_ctx_scale_t *scaler) +{ + if (!scaler || !scaler->scale) + return false; + + scaler->scale->valid = false; + + current_shader->shader_scale(current_shader_data, + scaler->idx, scaler->scale); + return true; +} + bool video_shader_driver_info(video_shader_ctx_info_t *shader_info) { if (!shader_info) diff --git a/gfx/video_driver.h b/gfx/video_driver.h index c88721e4b0..0221aabb6d 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -1192,6 +1192,8 @@ bool video_shader_driver_init(video_shader_ctx_init_t *init); void video_driver_set_coords(video_shader_ctx_coords_t *coords); +bool video_shader_driver_scale(video_shader_ctx_scale_t *scaler); + bool video_shader_driver_info(video_shader_ctx_info_t *shader_info); void video_driver_set_mvp(video_shader_ctx_mvp_t *mvp);