Expose currently selected shader via poke interface.

This commit is contained in:
Themaister 2014-05-23 12:23:08 +02:00
parent 83b37812b8
commit b0e014adc6
7 changed files with 44 additions and 0 deletions

View File

@ -358,6 +358,8 @@ typedef struct video_poke_interface
void (*show_mouse)(void *data, bool state);
void (*grab_mouse_toggle)(void *data);
struct gfx_shader *(*get_current_shader)(void *data);
} video_poke_interface_t;
typedef struct video_driver

View File

@ -2909,6 +2909,12 @@ static void gl_show_mouse(void *data, bool state)
gl->ctx_driver->show_mouse(gl, state);
}
static struct gfx_shader *gl_get_current_shader(void *data)
{
gl_t *gl = (gl_t*)data;
return gl->shader ? gl->shader->get_current_shader() : NULL;
}
static const video_poke_interface_t gl_poke_interface = {
NULL,
#ifdef HAVE_FBO
@ -2924,6 +2930,9 @@ static const video_poke_interface_t gl_poke_interface = {
gl_set_osd_msg,
gl_show_mouse,
NULL,
gl_get_current_shader,
};
static void gl_get_poke_interface(void *data, const video_poke_interface_t **iface)

View File

@ -913,6 +913,11 @@ static bool gl_cg_mipmap_input(unsigned index)
return false;
}
static struct gfx_shader *gl_cg_get_current_shader(void)
{
return cg_active ? cg_shader : NULL;
}
void gl_cg_invalidate_context(void)
{
cgCtx = NULL;
@ -931,6 +936,7 @@ const gl_shader_backend_t gl_cg_backend = {
gl_cg_set_mvp,
gl_cg_get_prev_textures,
gl_cg_mipmap_input,
gl_cg_get_current_shader,
RARCH_SHADER_CG,
};

View File

@ -54,6 +54,8 @@ struct gl_shader_backend
unsigned (*get_prev_textures)(void);
bool (*mipmap_input)(unsigned index);
struct gfx_shader *(*get_current_shader)(void);
enum rarch_shader_type type;
};

View File

@ -1179,6 +1179,11 @@ static bool gl_glsl_mipmap_input(unsigned index)
return false;
}
static struct gfx_shader *gl_glsl_get_current_shader(void)
{
return glsl_enable ? glsl_shader : NULL;
}
void gl_glsl_set_get_proc_address(gfx_ctx_proc_t (*proc)(const char*))
{
glsl_get_proc_address = proc;
@ -1204,6 +1209,7 @@ const gl_shader_backend_t gl_glsl_backend = {
gl_glsl_set_mvp,
gl_glsl_get_prev_textures,
gl_glsl_mipmap_input,
gl_glsl_get_current_shader,
RARCH_SHADER_GLSL,
};

View File

@ -435,6 +435,11 @@ static bool hlsl_mipmap_input(unsigned index)
return false;
}
static struct gfx_shader *hlsl_get_current_shader(void)
{
return NULL;
}
const gl_shader_backend_t hlsl_backend = {
hlsl_init,
hlsl_deinit,
@ -448,6 +453,7 @@ const gl_shader_backend_t hlsl_backend = {
hlsl_set_mvp,
NULL, /* hlsl_get_prev_textures */
hlsl_mipmap_input,
hlsl_get_current_shader,
RARCH_SHADER_HLSL,
};

View File

@ -751,6 +751,13 @@ static void thread_apply_state_changes(void *data)
slock_unlock(thr->frame.lock);
}
// This is read-only state which should not have any kind of race condition.
static struct gfx_shader *thread_get_current_shader(void *data)
{
thread_video_t *thr = (thread_video_t*)data;
return thr->poke ? thr->poke->get_current_shader(thr->driver_data) : NULL;
}
static const video_poke_interface_t thread_poke = {
thread_set_filtering,
#ifdef HAVE_FBO
@ -763,6 +770,12 @@ static const video_poke_interface_t thread_poke = {
thread_set_texture_frame,
thread_set_texture_enable,
#endif
NULL,
NULL,
NULL,
thread_get_current_shader,
};
static void thread_get_poke_interface(void *data, const video_poke_interface_t **iface)