OpenGLビューを含むプログラムで作業しています(Ogre3Dを使用)。このプログラムは、独自のUIを開くことができるサードパーティのプラグイン(すなわち、VST)をホストしています。いくつかのプラグインはUI用にOpenGLも使用しており、(他の非OpenGLプラグインのUIではクラッシュしないでください)を開くとすぐにOgre Render Systemでがプログラムをクラッシュさせます。サードパーティのプラグインでもOpenGLを使用している場合のOpenGLの問題
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ビューの他のプログラムは、まったく同じプラグインであっても、私はそのような状況をどのように処理するのだろうかと思います。
これをどのように処理するか考えてください。
ありがとうございました。ではごきげんよう。
私はプラグインを別のプロセスに橋渡しできますが、それは痛いでしょう。 – moala