mirror of
https://github.com/libretro/RetroArch
synced 2025-03-02 19:13:34 +00:00
Yet another fix for glUniformMatrix4fv
This should fix fullscreen toggling/context resets.
This commit is contained in:
parent
efdee89d09
commit
d360bf17d5
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user