Install new program binary when current program is successfully relinked or reloaded
Trac #21270
Bug=351
Signed-off-by: Nicolas Capens
git-svn-id: https://angleproject.googlecode.com/svn/trunk@1240 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index e59f010..2037045 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -1167,14 +1167,31 @@
{
Program *programObject = mResourceManager->getProgram(program);
- programObject->link();
+ bool linked = programObject->link();
+
+ // if the current program was relinked successfully we
+ // need to install the new executables
+ if (linked && program == mState.currentProgram)
+ {
+ mCurrentProgramBinary = programObject->getProgramBinary();
+ mDxUniformsDirty = true;
+ }
}
void Context::setProgramBinary(GLuint program, const void *binary, GLint length)
{
Program *programObject = mResourceManager->getProgram(program);
- programObject->setProgramBinary(binary, length);
+ bool loaded = programObject->setProgramBinary(binary, length);
+
+ // if the current program was reloaded successfully we
+ // need to install the new executables
+ if (loaded && program == mState.currentProgram)
+ {
+ mCurrentProgramBinary = programObject->getProgramBinary();
+ mDxUniformsDirty = true;
+ }
+
}
void Context::beginQuery(GLenum target, GLuint query)