diff --git a/Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx b/Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx index daf38cdcdf4e432c4ccc5efcf216ed0ca9052b28..4ca6cffc6c477e7db11f67f10b4e4323d8e4bff7 100644 --- a/Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx +++ b/Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx @@ -2185,7 +2185,7 @@ void vtkOpenGLPolyDataMapper::UpdateShaders( gss->Delete(); // if the shader changed reinitialize the VAO - if (newShader != cellBO.Program) + if (newShader != cellBO.Program || cellBO.Program->GetMTime() > cellBO.AttributeUpdateTime) { cellBO.Program = newShader; // reset the VAO as the shader has changed @@ -2197,6 +2197,11 @@ void vtkOpenGLPolyDataMapper::UpdateShaders( else { renWin->GetShaderCache()->ReadyShaderProgram(cellBO.Program); + if (cellBO.Program->GetMTime() > cellBO.AttributeUpdateTime) + { + // reset the VAO as the shader has changed + cellBO.VAO->ReleaseGraphicsResources(); + } } if (cellBO.Program) @@ -2234,7 +2239,8 @@ void vtkOpenGLPolyDataMapper::SetMapperShaderParameters( if (cellBO.IBO->IndexCount && (this->VBOs->GetMTime() > cellBO.AttributeUpdateTime || - cellBO.ShaderSourceTime > cellBO.AttributeUpdateTime)) + cellBO.ShaderSourceTime > cellBO.AttributeUpdateTime || + cellBO.VAO->GetMTime() > cellBO.AttributeUpdateTime)) { cellBO.VAO->Bind(); diff --git a/Rendering/OpenGL2/vtkOpenGLVertexArrayObject.cxx b/Rendering/OpenGL2/vtkOpenGLVertexArrayObject.cxx index 43e53045b00a2feaf135e35ed7a6878188c778e0..20b240d150d975789c5985826a494ae2be08db91 100644 --- a/Rendering/OpenGL2/vtkOpenGLVertexArrayObject.cxx +++ b/Rendering/OpenGL2/vtkOpenGLVertexArrayObject.cxx @@ -226,6 +226,7 @@ void vtkOpenGLVertexArrayObject::Release() } } } + this->Modified(); } void vtkOpenGLVertexArrayObject::ShaderProgramChanged() diff --git a/Rendering/OpenGL2/vtkShaderProgram.cxx b/Rendering/OpenGL2/vtkShaderProgram.cxx index 56d5c9288279fe911ba483c5134a403507154fb5..8a654ef114da2ac0ebc6368b628804b79173020a 100644 --- a/Rendering/OpenGL2/vtkShaderProgram.cxx +++ b/Rendering/OpenGL2/vtkShaderProgram.cxx @@ -541,6 +541,7 @@ void vtkShaderProgram::ReleaseGraphicsResources(vtkWindow* win) { this->TransformFeedback->ReleaseGraphicsResources(); } + this->Modified(); } bool vtkShaderProgram::EnableAttributeArray(const char* name)