第三方插件也使用OpenGL时的OpenGL问题

时间:2011-12-30 19:04:18

标签: opengl plugins concurrency crash

我正在开发一个包含OpenGL视图的程序(使用Ogre3D);此程序托管第三方插件(即VST),可以打开自己的UI。一些插件也为他们的UI使用OpenGL,并且只要打开特定于插件的OpenGL UI,就会在Ogre渲染系统中使程序崩溃(与其他非opengl插件没有崩溃 - ins'UI)。

Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000000
Crashed Thread: 0 Dispatch queue: com.apple.main-thread

Thread 0 Crashed: com.apple.main-thread
0 GLEngine              gleRunVertexSubmitImmediate + 722
1 GLEngine              gleLLVMArrayFunc + 60
2 GLEngine              gleSetVertexArrayFunc + 116
3 GLEngine              gleDrawArraysOrElements_ExecCore + 1514
4 GLEngine              glDrawElements_Exec + 834
5 libGL.dylib           glDrawElements + 52
6 RenderSystem_GL.dylib Ogre::GLRenderSystem::_Render(...)...
...
22 Ogre Ogre::Root::renderOneFrame() + 30
23 com.mycompany.myapp MyOgreWidget::paint()
...

(apparently a third-party thread from the plug-in)
Thread 10: Dipatch queue: com.apple.opengl.glvmDoWork
0 libSystem.B.dylib          mach_msg_trap + 10
1 libSystem.B.dylib          mach_msg + 68
2 libCoreVMClient.dylib      cvmsServ_BuildModularFunction + 195
3 libCoreVMClient.dylib      CVMSBuildModularFunction + 98
4 libGLProgrammability.dylib glvm_deferred_build_modular(voi*) + 254
5 libSystem.B.dylib          _dispatch_queue_drain + 249
6 libSystem.B.dylib          _dispatch_queue_invoke + 50
7 libSystem.B.dylib          _dispatch_worker_thread2 + 249
8 libSystem.B.dylib          _pthread_wqthread + 390
9 libSystem.B.dylib          start_wqthread + 30

我怀疑在Ogre3D或插件的UI中没有正确管理OpenGL上下文,但是无法访问插件的渲染回调。

我使用Ogre3D 1.7.1和1.7.3进行了测试。我的UI工具包是Qt(版本4.6.3和4.7.4)。与MacOSX和Windows相同的问题。

我知道其他具有OpenGL视图的程序没有这个问题,即使使用完全相同的插件,我也不知道他们是如何处理这种情况的。

知道如何处理吗?

感谢您的帮助。一切顺利。

1 个答案:

答案 0 :(得分:0)

  

知道如何处理吗?

我在完成你自己的(= Ogre3D)OpenGL工作后立即调用QGLWidget::doneCurrent,并在做自己的OpenGL工作之前做一个QGLWidget::makeCurrent