OpenGL state errors with QVTKOpenGLWidget and vtk8.2 on Render call

I have an stereo application utilizing QT and running well on VTK8.1 using QVTKWidget. However, when switching to VTK8.2, I see a number of VTK errors every time a call is made to vtkRenderer::Render()

Here is the stack trace from the vtkOutputWindow:

I see the same issue when updating the QVTKWidget to QVTKOpenGLWidget. I followed the steps also from the thread here, where the user seemed to have a similar issue: OpenGL state errors with QVTKOpenGLWidget and vtk8.2

It seems that the QVTKOpenGLWindow::initializeGL function is never called on QVTKOpenGLWidget’s internal window.

I’m able to run the test case from TestQVTKOpenGLWidget.cxx without any issues, so I’m wondering if perhaps this is an issue with my stereo rendering setup?

http://idownvotedbecau.se/imageofanexception/

Please include the errors in a textual form if possible.

ParaView is a VTK application using QVTKOpenGLWidget (named now QVTKOpenGLStereoWidget in master) supporting stereo rendering.

It does not make any change to the rendering part and uses the widget directly. You may want to use that as an inspiration.

You may also want to try with master instead of VTK 8.1 as these class have changed quite a log in the last years.

Generic Warning: In d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx, line 162
Error in cache state for GL_VIEWPORT


Generic Warning: In d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx, line 173
Error in cache state for GL_SCISSOR_BOX


Generic Warning: In d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx, line 229
at stack loc
 at vtkOpenGLState::CheckState in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx line 228
 at vtkOpenGLState::SetEnumState in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx line 552
 at vtkOpenGLState::vtkglDisable in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx line 821
 at vtkOpenGLProperty::Render in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglproperty.cxx line 45
 at vtkActor::RenderOpaqueGeometry in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkactor.cxx line 172
 at vtkRenderer::UpdateOpaquePolygonalGeometry in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderer.cxx line 742
 at vtkRenderer::DeviceRenderOpaqueGeometry in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderer.cxx line 432
 at vtkOpenGLRenderer::DeviceRenderOpaqueGeometry in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderer.cxx line 435
 at vtkOpenGLRenderer::UpdateGeometry in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderer.cxx line 323
 at vtkOpenGLRenderer::DeviceRender in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderer.cxx line 236
 at vtkRenderer::Render in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderer.cxx line 372
 at vtkRendererCollection::Render in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderercollection.cxx line 53
 at vtkRenderWindow::DoStereoRender in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderwindow.cxx line 358
 at vtkRenderWindow::Render in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderwindow.cxx line 292
 at vtkOpenGLRenderWindow::Render in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderwindow.cxx line 2565

eneric Warning: In d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx, line 162
Error in cache state for GL_VIEWPORT


Generic Warning: In d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx, line 173
Error in cache state for GL_SCISSOR_BOX


Generic Warning: In d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx, line 229
at stack loc
 at vtkOpenGLState::CheckState in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx line 228
 at vtkOpenGLState::vtkglDepthMask in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx line 424
 at vtkOpenGLState::ScopedValue<unsigned char>::~ScopedValue<unsigned char> in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.h line 150
	SymGetLineFromAddr64 returned error code 487
	at vtkOpenGLState::ScopedglDepthMask::~ScopedglDepthMask
 at vtkOpenGLActor::Render in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglactor.cxx line 113
 at vtkActor::RenderOpaqueGeometry in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkactor.cxx line 196
 at vtkRenderer::UpdateOpaquePolygonalGeometry in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderer.cxx line 742
 at vtkRenderer::DeviceRenderOpaqueGeometry in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderer.cxx line 432
 at vtkOpenGLRenderer::DeviceRenderOpaqueGeometry in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderer.cxx line 435
 at vtkOpenGLRenderer::UpdateGeometry in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderer.cxx line 323
 at vtkOpenGLRenderer::DeviceRender in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderer.cxx line 236
 at vtkRenderer::Render in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderer.cxx line 372
 at vtkRendererCollection::Render in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderercollection.cxx line 53
 at vtkRenderWindow::DoStereoRender in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderwindow.cxx line 358
 at vtkRenderWindow::Render in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderwindow.cxx line 292
 at vtkOpenGLRenderWindow::Render in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderwindow.cxx line 2565


Generic Warning: In d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx, line 229
at stack loc
 at vtkOpenGLState::CheckState in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx line 228
 at vtkOpenGLState::vtkglDepthMask in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx line 424
 at vtkOpenGLActor::Render in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglactor.cxx line 69
 at vtkActor::RenderOpaqueGeometry in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkactor.cxx line 196
 at vtkRenderer::UpdateOpaquePolygonalGeometry in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderer.cxx line 742
 at vtkRenderer::DeviceRenderOpaqueGeometry in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderer.cxx line 432
 at vtkOpenGLRenderer::DeviceRenderOpaqueGeometry in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderer.cxx line 435
 at vtkOpenGLRenderer::UpdateGeometry in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderer.cxx line 323
 at vtkOpenGLRenderer::DeviceRender in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderer.cxx line 236
 at vtkRenderer::Render in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderer.cxx line 372
 at vtkRendererCollection::Render in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderercollection.cxx line 53
 at vtkRenderWindow::DoStereoRender in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderwindow.cxx line 358
 at vtkRenderWindow::Render in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderwindow.cxx line 292
 at vtkOpenGLRenderWindow::Render in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderwindow.cxx line 2565

Generic Warning: In d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx, line 162
Error in cache state for GL_VIEWPORT


Generic Warning: In d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx, line 173
Error in cache state for GL_SCISSOR_BOX


Generic Warning: In d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx, line 229
at stack loc
 at vtkOpenGLState::CheckState in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx line 228
 at vtkOpenGLState::vtkglClearColor in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx line 376
 at vtkOpenGLRenderer::Clear in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderer.cxx line 567
 at epxCameraOpenGL2::Render in d:\code\dev-update3rdparty\source\epxrendering\epxcameraopengl2.cpp line 97
 at vtkRenderer::UpdateCamera in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderer.cxx line 482
 at vtkOpenGLRenderer::DeviceRender in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderer.cxx line 232
 at vtkRenderer::Render in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderer.cxx line 372
 at vtkRendererCollection::Render in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderercollection.cxx line 53
 at vtkRenderWindow::DoStereoRender in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderwindow.cxx line 333
 at vtkRenderWindow::Render in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderwindow.cxx line 292
 at vtkOpenGLRenderWindow::Render in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderwindow.cxx line 2565

Generic Warning: In d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx, line 162
Error in cache state for GL_VIEWPORT


Generic Warning: In d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx, line 173
Error in cache state for GL_SCISSOR_BOX


Generic Warning: In d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx, line 229
at stack loc
 at vtkOpenGLState::CheckState in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx line 228
 at vtkOpenGLState::vtkglClearDepth in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglstate.cxx line 394
 at vtkOpenGLRenderer::Clear in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderer.cxx line 573
 at epxCameraOpenGL2::Render in d:\code\dev-update3rdparty\source\epxrendering\epxcameraopengl2.cpp line 97
 at vtkRenderer::UpdateCamera in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderer.cxx line 482
 at vtkOpenGLRenderer::DeviceRender in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderer.cxx line 232
 at vtkRenderer::Render in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderer.cxx line 372
 at vtkRendererCollection::Render in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderercollection.cxx line 53
 at vtkRenderWindow::DoStereoRender in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderwindow.cxx line 333
 at vtkRenderWindow::Render in d:\engine\vtk\vtk-8.2.0\rendering\core\vtkrenderwindow.cxx line 292
 at vtkOpenGLRenderWindow::Render in d:\engine\vtk\vtk-8.2.0\rendering\opengl2\vtkopenglrenderwindow.cxx line 2565

@ken-martin

Another note - these errors don’t appear when in a release build of my application. I’ve enabled both VTK_REPORT_OPENGL_ERRORS and VTK_REPORT_OPENGL_ERRORS_IN_RELEASE_BUILDS

Those warnings can be ignored if your application is working OK. You can turn them off by undefining VTK_REPORT_OPENGL_ERRORS (in vtkOpenGLState.cxx) There have been massive changes and fixes in the Qt and OpenGL classes since 8.2 so I hesitate to dig into the old code too much with 9.0 coming out. Testing against master would be interesting as we tend not to have a lot of crystal eyes testing.