From d360bf17d5f67d1e0e33899f7af7184227c55f06 Mon Sep 17 00:00:00 2001 From: Logan McNaughton Date: Wed, 28 Sep 2016 08:18:32 -0600 Subject: [PATCH] Yet another fix for glUniformMatrix4fv This should fix fullscreen toggling/context resets. --- gfx/drivers_shader/shader_glsl.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/gfx/drivers_shader/shader_glsl.c b/gfx/drivers_shader/shader_glsl.c index 046448f3d0..b06ef392b0 100644 --- a/gfx/drivers_shader/shader_glsl.c +++ b/gfx/drivers_shader/shader_glsl.c @@ -149,6 +149,8 @@ typedef struct glsl_shader_data static bool glsl_core; static unsigned glsl_major; 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, GLuint prog, const char *base) @@ -646,6 +648,7 @@ static void gl_glsl_destroy_resources(glsl_shader_data_t *glsl) if (!glsl) return; + current_idx = 0; glUseProgram(0); 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 float current_mat_data[GFX_MAX_SHADERS]; - static unsigned current_idx; int loc; 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; 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); current_idx = glsl->active_idx; - current_mat_data[loc] = *mat->data; + current_mat_data[glsl->active_idx] = *mat->data; } } return true;