1
0
mirror of https://github.com/libretro/RetroArch synced 2025-02-03 17:54:04 +00:00

Add SHADER_CTL_DIRECT_GET_CURRENT_SHADER

This commit is contained in:
twinaphex 2016-02-14 21:55:19 +01:00
parent 46b963619a
commit 38034abce6
3 changed files with 23 additions and 11 deletions

@ -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

@ -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;

@ -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