Add set_active to 'use' function callback for shader driver

This commit is contained in:
twinaphex 2016-04-15 05:08:03 +02:00
parent 934681614f
commit 0f65518118
6 changed files with 25 additions and 13 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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