diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index ebeec015c0..3cf83ec60d 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -307,7 +307,7 @@ static bool gl_shader_init(gl_t *gl) static void gl_shader_deinit(gl_t *gl) { - video_shader_driver_deinit(); + video_shader_driver_ctl(SHADER_CTL_DEINIT, NULL); } #ifndef NO_GL_FF_VERTEX diff --git a/gfx/video_shader_driver.c b/gfx/video_shader_driver.c index a69d3c6f08..c016a5d6c2 100644 --- a/gfx/video_shader_driver.c +++ b/gfx/video_shader_driver.c @@ -99,18 +99,6 @@ bool video_shader_driver_init(const shader_backend_t *shader, return true; } -void video_shader_driver_deinit(void) -{ - if (!current_shader) - return; - - if (current_shader->deinit) - current_shader->deinit(shader_data); - - shader_data = NULL; - current_shader = NULL; -} - void video_shader_driver_use(void *data, unsigned index) { if (!current_shader) @@ -183,6 +171,16 @@ bool video_shader_driver_ctl(enum video_shader_driver_ctl_state state, void *dat { switch (state) { + case SHADER_CTL_DEINIT: + if (!current_shader) + return false; + + if (current_shader->deinit) + current_shader->deinit(shader_data); + + shader_data = NULL; + current_shader = NULL; + break; case SHADER_CTL_SET_PARAMS: { video_shader_ctx_params_t *params = (video_shader_ctx_params_t*)data; diff --git a/gfx/video_shader_driver.h b/gfx/video_shader_driver.h index 9fffc5d75f..92db893d64 100644 --- a/gfx/video_shader_driver.h +++ b/gfx/video_shader_driver.h @@ -33,6 +33,7 @@ extern "C" { enum video_shader_driver_ctl_state { SHADER_CTL_NONE = 0, + SHADER_CTL_DEINIT, /* Finds first suitable shader context driver. */ SHADER_CTL_INIT_FIRST, SHADER_CTL_SET_PARAMS, @@ -138,8 +139,6 @@ struct video_shader *video_shader_driver_get_current_shader(void); bool video_shader_driver_init(const shader_backend_t *shader, void *data, const char *path); -void video_shader_driver_deinit(void); - void video_shader_driver_use(void *data, unsigned index); const char *video_shader_driver_get_ident(void);