diff options
| author | degasus <wickmarkus@web.de> | 2013-08-23 17:52:47 +0200 |
|---|---|---|
| committer | degasus <wickmarkus@web.de> | 2013-08-23 17:53:20 +0200 |
| commit | c9e13f6b7a7164ee2807cfdf64491659888994c4 (patch) | |
| tree | 7419d30da8550531fe17898400c5aae1244f97ac /Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | |
| parent | 1469342f8301745fb7695c5bffd0bde723419ad0 (diff) | |
ogl: fix ubo workaround
Diffstat (limited to 'Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp')
| -rw-r--r-- | Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index d7cafb49ca..95c5c3f46d 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -78,17 +78,35 @@ void SHADER::SetProgramVariables() glUniformBlockBinding(glprogid, VSBlock_id, 2); } - // We cache our uniform locations for now - // Once we move up to a newer version of GLSL, ~1.30 - // We can remove this - - // (Sonicadvance): For some reason this fails on my hardware - //glGetUniformIndices(glprogid, NUM_UNIFORMS, UniformNames, UniformLocations); - // Got to do it this crappy way. - UniformLocations[0] = glGetUniformLocation(glprogid, UniformNames[0]); - if (!g_ActiveConfig.backend_info.bSupportsGLSLUBO) - for (int a = 1; a < NUM_UNIFORMS; ++a) - UniformLocations[a] = glGetUniformLocation(glprogid, UniformNames[a]); + // UBO workaround + for (int a = 0; a < NUM_UNIFORMS; ++a) + { + UniformLocations[a] = glGetUniformLocation(glprogid, UniformNames[a]); + UniformSize[a] = 0; + if(g_ActiveConfig.backend_info.bSupportsGLSLUBO) + break; + } + if(!g_ActiveConfig.backend_info.bSupportsGLSLUBO) + { + int max_uniforms = 0; + char name[50]; + int size; + + glGetProgramiv(glprogid, GL_ACTIVE_UNIFORMS, &max_uniforms); + for(int i=0; i<max_uniforms; i++) + { + glGetActiveUniform(glprogid, i, sizeof(name), NULL, &size, NULL, name); + for (int a = 0; a < NUM_UNIFORMS; ++a) + { + if(strstr(name, UniformNames[a])) + { + UniformSize[a] = size; + break; + } + } + } + } + // Bind Texture Sampler for (int a = 0; a <= 9; ++a) |
