<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>Hi,</p>
<p>   I have come across an interesting problem with VTK and I wanted to ask if there is another way to work around it.</p>
<p><br>
</p>
<p>Using the OpenGL2 backend, we have discovered that if another system renders to the same opengl context as VTK,</p>
<p>then the shader cache is put into an invalidated state.</p>
<p><br>
</p>
<p>The root problem is that in<strong> </strong><span>Rendering/OpenGL2/vtkOpenGLShaderCache.cxx, in
<span>vtkOpenGLShaderCache::BindShader</span>(), the lastShaderBound is assumed to not change. VTK assumes that it's the only system setting glUseProgram() for the opengl context.</span></p>
<p><span>So if another system clears the GL_CURRENT_PROGRAM value, then VTK doesn't know about it and the following calls to set program uniforms fails with an opengl error.</span></p>
<p><span><br>
</span></p>
<p><span>A suggested is to add a call to glGetIntegerv(GL_CURRENT_PROGRAM, ...) and compare it against this->Handle</span> before returning.<br>
</p>
<p><br>
</p>
<p>I worked around this problem by clearing the shader cache before invoking <span>
vtkRenderWindow</span>::Render() but this required knowing that the shader cache was invalid.<br>
</p>
<p><br>
</p>
<p>Sincerely,</p>
<p>Ben<br>
</p>
</div>
</body>
</html>