diff options
| author | degasus <wickmarkus@web.de> | 2013-01-15 14:22:40 +0100 |
|---|---|---|
| committer | degasus <wickmarkus@web.de> | 2013-01-15 14:22:40 +0100 |
| commit | 687d74e6c20efa3b66c839365b2431c2a4caf9e4 (patch) | |
| tree | 06468e8ad2a514efe536300cfde1b5ab2d0ea6dc /Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | |
| parent | 85200db6a21b57d9ee7e4d325553f40b90a5a37d (diff) | |
only change shader if needed
Diffstat (limited to 'Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp')
| -rw-r--r-- | Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 99997b1aa6..b1930570bd 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -131,26 +131,25 @@ void ProgramShaderCache::SetProgramBindings ( ProgramShaderCache::PCacheEntry& e void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) { - CurrentFShader = PS; - CurrentVShader = VS; - - if (CurrentFShader == 0 && CurrentVShader == 0) - { - CurrentProgram = 0; - glUseProgram(0); + if(!PS || !VS) { + ERROR_LOG(VIDEO, "tried to bind a zero shader"); return; } + + CurrentFShader = PS; + CurrentVShader = VS; - // Fragment shaders can survive without Vertex Shaders - // We have a valid fragment shader, let's create our program + // We have a valid shaders, let's create our program std::pair<u32, u32> ShaderPair = std::make_pair(CurrentFShader, CurrentVShader); PCache::iterator iter = pshaders.find(ShaderPair); if (iter != pshaders.end()) { PCacheEntry &entry = iter->second; - glUseProgram(entry.prog_id); - CurrentShaderProgram = ShaderPair; - CurrentProgram = entry.prog_id; + if(CurrentProgram != entry.prog_id) { + glUseProgram(entry.prog_id); + CurrentProgram = entry.prog_id; + CurrentShaderProgram = ShaderPair; + } return; } @@ -159,9 +158,7 @@ void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) // Right, the program is created now // Let's attach everything - if (entry.vsid != 0) // attaching zero vertex shader makes it freak out - glAttachShader(entry.prog_id, entry.vsid); - + glAttachShader(entry.prog_id, entry.vsid); glAttachShader(entry.prog_id, entry.psid); if (g_ActiveConfig.backend_info.bSupportsGLSLCache) @@ -254,6 +251,8 @@ void ProgramShaderCache::Init(void) ProgramShaderCacheInserter inserter; g_program_disk_cache.OpenAndRead(cache_filename, inserter); } + + CurrentProgram = 0; } void ProgramShaderCache::Shutdown(void) |
