summaryrefslogtreecommitdiff
path: root/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp
diff options
context:
space:
mode:
authordegasus <wickmarkus@web.de>2013-01-15 14:22:40 +0100
committerdegasus <wickmarkus@web.de>2013-01-15 14:22:40 +0100
commit687d74e6c20efa3b66c839365b2431c2a4caf9e4 (patch)
tree06468e8ad2a514efe536300cfde1b5ab2d0ea6dc /Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp
parent85200db6a21b57d9ee7e4d325553f40b90a5a37d (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.cpp29
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)