diff --git a/gfx/drivers_shader/shader_glsl.c b/gfx/drivers_shader/shader_glsl.c index b06ef392b0..abc228e2c7 100644 --- a/gfx/drivers_shader/shader_glsl.c +++ b/gfx/drivers_shader/shader_glsl.c @@ -149,6 +149,7 @@ typedef struct glsl_shader_data static bool glsl_core; static unsigned glsl_major; static unsigned glsl_minor; +static float* current_mat_data_pointer[GFX_MAX_SHADERS]; static float current_mat_data[GFX_MAX_SHADERS]; static unsigned current_idx; @@ -1269,9 +1270,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[glsl->active_idx]) { + if (current_idx != glsl->active_idx || mat->data != current_mat_data_pointer[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_pointer[glsl->active_idx] = (float*)mat->data; current_mat_data[glsl->active_idx] = *mat->data; } }