Yet another fix for glUniformMatrix4fv

This should fix fullscreen toggling/context resets.
This commit is contained in:
Logan McNaughton 2016-09-28 08:18:32 -06:00 committed by GitHub
parent efdee89d09
commit d360bf17d5

View File

@ -149,6 +149,8 @@ typedef struct glsl_shader_data
static bool glsl_core; static bool glsl_core;
static unsigned glsl_major; static unsigned glsl_major;
static unsigned glsl_minor; static unsigned glsl_minor;
static float current_mat_data[GFX_MAX_SHADERS];
static unsigned current_idx;
static GLint gl_glsl_get_uniform(glsl_shader_data_t *glsl, static GLint gl_glsl_get_uniform(glsl_shader_data_t *glsl,
GLuint prog, const char *base) GLuint prog, const char *base)
@ -646,6 +648,7 @@ static void gl_glsl_destroy_resources(glsl_shader_data_t *glsl)
if (!glsl) if (!glsl)
return; return;
current_idx = 0;
glUseProgram(0); glUseProgram(0);
for (i = 0; i < GFX_MAX_SHADERS; i++) for (i = 0; i < GFX_MAX_SHADERS; i++)
{ {
@ -1256,8 +1259,6 @@ static void gl_glsl_set_params(void *data, void *shader_data,
static bool gl_glsl_set_mvp(void *data, void *shader_data, const math_matrix_4x4 *mat) static bool gl_glsl_set_mvp(void *data, void *shader_data, const math_matrix_4x4 *mat)
{ {
static float current_mat_data[GFX_MAX_SHADERS];
static unsigned current_idx;
int loc; int loc;
glsl_shader_data_t *glsl = (glsl_shader_data_t*)shader_data; glsl_shader_data_t *glsl = (glsl_shader_data_t*)shader_data;
@ -1268,10 +1269,10 @@ static bool gl_glsl_set_mvp(void *data, void *shader_data, const math_matrix_4x4
loc = glsl->uniforms[glsl->active_idx].mvp; loc = glsl->uniforms[glsl->active_idx].mvp;
if (loc >= 0) { if (loc >= 0) {
if (current_idx != glsl->active_idx || *mat->data != current_mat_data[loc]) { if (current_idx != glsl->active_idx || *mat->data != current_mat_data[glsl->active_idx]) {
glUniformMatrix4fv(loc, 1, GL_FALSE, mat->data); glUniformMatrix4fv(loc, 1, GL_FALSE, mat->data);
current_idx = glsl->active_idx; current_idx = glsl->active_idx;
current_mat_data[loc] = *mat->data; current_mat_data[glsl->active_idx] = *mat->data;
} }
} }
return true; return true;