From 38034abce6160b2b47b27a2809fc0d8f7f8db7d5 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 14 Feb 2016 21:55:19 +0100 Subject: [PATCH] Add SHADER_CTL_DIRECT_GET_CURRENT_SHADER --- gfx/drivers/gl.c | 6 +++++- gfx/video_shader_driver.c | 18 +++++++++++------- gfx/video_shader_driver.h | 10 +++++++--- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index abec25ab8d..133f4576f6 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -3687,7 +3687,11 @@ static void gl_show_mouse(void *data, bool state) static struct video_shader *gl_get_current_shader(void *data) { - return video_shader_driver_direct_get_current_shader(); + video_shader_ctx_t shader_info; + + video_shader_driver_ctl(SHADER_CTL_DIRECT_GET_CURRENT_SHADER, &shader_info); + + return shader_info.data; } #endif diff --git a/gfx/video_shader_driver.c b/gfx/video_shader_driver.c index 234b8264a6..37d301eda2 100644 --- a/gfx/video_shader_driver.c +++ b/gfx/video_shader_driver.c @@ -84,17 +84,21 @@ unsigned video_shader_driver_get_prev_textures(void) return current_shader->get_prev_textures(shader_data); } -struct video_shader *video_shader_driver_direct_get_current_shader(void) -{ - if (!current_shader || !current_shader->get_current_shader) - return NULL; - return current_shader->get_current_shader(shader_data); -} - bool video_shader_driver_ctl(enum video_shader_driver_ctl_state state, void *data) { switch (state) { + case SHADER_CTL_DIRECT_GET_CURRENT_SHADER: + { + video_shader_ctx_t *shader = (video_shader_ctx_t*)data; + + shader->data = NULL; + if (!current_shader || !current_shader->get_current_shader) + return false; + + shader->data = current_shader->get_current_shader(shader_data); + } + break; case SHADER_CTL_DEINIT: if (!current_shader) return false; diff --git a/gfx/video_shader_driver.h b/gfx/video_shader_driver.h index 4ffa8f0d5e..8d022ad779 100644 --- a/gfx/video_shader_driver.h +++ b/gfx/video_shader_driver.h @@ -69,7 +69,8 @@ enum video_shader_driver_ctl_state SHADER_CTL_SET_MVP, SHADER_CTL_FILTER_TYPE, SHADER_CTL_USE, - SHADER_CTL_WRAP_TYPE + SHADER_CTL_WRAP_TYPE, + SHADER_CTL_DIRECT_GET_CURRENT_SHADER }; typedef struct shader_backend @@ -169,6 +170,11 @@ typedef struct video_shader_ctx_wrap enum gfx_wrap_type type; } video_shader_ctx_wrap_t; +typedef struct video_shader_ctx +{ + struct video_shader *data; +} video_shader_ctx_t; + extern const shader_backend_t gl_glsl_backend; extern const shader_backend_t hlsl_backend; extern const shader_backend_t gl_cg_backend; @@ -190,8 +196,6 @@ const char *video_shader_driver_get_ident(void); unsigned video_shader_driver_get_prev_textures(void); -struct video_shader *video_shader_driver_direct_get_current_shader(void); - bool video_shader_driver_ctl(enum video_shader_driver_ctl_state state, void *data); #ifdef __cplusplus