mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 04:20:28 +00:00
Add set_active to 'use' function callback for shader driver
This commit is contained in:
parent
934681614f
commit
0f65518118
@ -1161,14 +1161,17 @@ error:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void gl_cg_use(void *data, void *shader_data, unsigned idx)
|
||||
static void gl_cg_use(void *data, void *shader_data, unsigned idx, bool set_active)
|
||||
{
|
||||
cg_shader_data_t *cg_data = (cg_shader_data_t*)shader_data;
|
||||
if (cg_data && cg_data->prg[idx].vprg && cg_data->prg[idx].fprg)
|
||||
{
|
||||
gl_cg_reset_attrib(cg_data);
|
||||
if (set_active)
|
||||
{
|
||||
gl_cg_reset_attrib(cg_data);
|
||||
cg_data->active_idx = idx;
|
||||
}
|
||||
|
||||
cg_data->active_idx = idx;
|
||||
cgGLBindProgram(cg_data->prg[idx].vprg);
|
||||
cgGLBindProgram(cg_data->prg[idx].fprg);
|
||||
}
|
||||
|
@ -1597,7 +1597,7 @@ static bool gl_glsl_set_coords(void *handle_data, void *shader_data, const void
|
||||
return true;
|
||||
}
|
||||
|
||||
static void gl_glsl_use(void *data, void *shader_data, unsigned idx)
|
||||
static void gl_glsl_use(void *data, void *shader_data, unsigned idx, bool set_active)
|
||||
{
|
||||
GLuint id;
|
||||
glsl_shader_data_t *glsl = (glsl_shader_data_t*)shader_data;
|
||||
@ -1607,10 +1607,14 @@ static void gl_glsl_use(void *data, void *shader_data, unsigned idx)
|
||||
if (!glsl)
|
||||
return;
|
||||
|
||||
gl_glsl_reset_attrib(glsl);
|
||||
|
||||
glsl->glsl_active_index = idx;
|
||||
id = glsl->prg[idx].id;
|
||||
if (set_active)
|
||||
{
|
||||
gl_glsl_reset_attrib(glsl);
|
||||
glsl->glsl_active_index = idx;
|
||||
id = glsl->prg[idx].id;
|
||||
}
|
||||
else
|
||||
id = idx;
|
||||
|
||||
glUseProgram(id);
|
||||
}
|
||||
|
@ -471,7 +471,7 @@ static void hlsl_deinit(void *data)
|
||||
free(hlsl_data);
|
||||
}
|
||||
|
||||
static void hlsl_use(void *data, void *shader_data, unsigned idx)
|
||||
static void hlsl_use(void *data, void *shader_data, unsigned idx, bool set_active)
|
||||
{
|
||||
d3d_video_t *d3d = (d3d_video_t*)data;
|
||||
hlsl_shader_data_t *hlsl_data = (hlsl_shader_data_t*)shader_data;
|
||||
@ -479,7 +479,11 @@ static void hlsl_use(void *data, void *shader_data, unsigned idx)
|
||||
|
||||
if (hlsl_data && hlsl_data->prg[idx].vprg && hlsl_data->prg[idx].fprg)
|
||||
{
|
||||
hlsl_data->active_idx = idx;
|
||||
if (set_active)
|
||||
{
|
||||
hlsl_data->active_idx = idx;
|
||||
}
|
||||
|
||||
d3d_set_vertex_shader(d3dr, idx, hlsl_data->prg[idx].vprg);
|
||||
#ifdef _XBOX
|
||||
D3DDevice_SetPixelShader(d3dr, hlsl_data->prg[idx].fprg);
|
||||
|
@ -99,10 +99,11 @@ static bool shader_null_set_coords(void *handle_data, void *shader_data, const v
|
||||
return false;
|
||||
}
|
||||
|
||||
static void shader_null_use(void *data, void *shader_data, unsigned idx)
|
||||
static void shader_null_use(void *data, void *shader_data, unsigned idx, bool set_active)
|
||||
{
|
||||
(void)data;
|
||||
(void)idx;
|
||||
(void)set_active;
|
||||
}
|
||||
|
||||
static unsigned shader_null_num(void *data)
|
||||
|
@ -228,7 +228,7 @@ bool video_shader_driver_ctl(enum video_shader_driver_ctl_state state, void *dat
|
||||
video_shader_ctx_info_t *shader_info = (video_shader_ctx_info_t*)data;
|
||||
if (!current_shader || !shader_info)
|
||||
return false;
|
||||
current_shader->use(shader_info->data, shader_data, shader_info->idx);
|
||||
current_shader->use(shader_info->data, shader_data, shader_info->idx, true);
|
||||
}
|
||||
break;
|
||||
case SHADER_CTL_WRAP_TYPE:
|
||||
|
@ -156,7 +156,7 @@ typedef struct shader_backend
|
||||
const void *feedback_info,
|
||||
const void *fbo_info, unsigned fbo_info_cnt);
|
||||
|
||||
void (*use)(void *data, void *shader_data, unsigned index);
|
||||
void (*use)(void *data, void *shader_data, unsigned index, bool set_active);
|
||||
unsigned (*num_shaders)(void *data);
|
||||
bool (*filter_type)(void *data, unsigned index, bool *smooth);
|
||||
enum gfx_wrap_type (*wrap_type)(void *data, unsigned index);
|
||||
|
Loading…
x
Reference in New Issue
Block a user