OpenGLをXcode(MacOSHighSierra)で使用しています。
別な処理をしている(ここでは主に別な描画処理の初期化)最中に画面上にまた別な描画処理を施したく、非同期で(<thread>)別スレッド内で描画処理を実行しようと以下のようなコードを書きました。
しかし、glClearで常にスレッドアクセスエラーを吐き出すようになりました。
はじめは正常な順番で処理できていないのかと思いmutexという非同期処理内で同期処理を行える旨の情報を見つけたので使ってみましたが結果は変わりませんでした。
glClearはopengl内部の関数ですので、この段階でつまずくと言うことはopenglそのものがthread系関数と相性が悪いのかなと感じ始めています。
###OpenGLを挟んだ非同期処理を行うにはどうすれば良いのでしょうか?
C++
1 2std::mutex mtx; //非同期処理内で同期処理を行える? 3 4A::a(){ 5 6 mtx.lock(); 7 8 do{ 9 10 // エラー発生: Thread 7: EXC_BAD_ACCESS (code=1, address=0x0) 11 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 12 13 glBindFramebuffer(GL_FRAMEBUFFER, 0); 14 glViewport(0, 0, screenWidth, screenHeight); 15 16 // 描画処理 17 18 glfwSwapBuffers(window); 19 glfwPollEvents(); 20 21 }while(//終了処理); 22 23 mtx.unlock(); 24 25} 26 27std::thread thread_0([this](){this->a();}); // 非同期処理を開始 28 29// この辺で非同期中にしたい処理を施す。 30 31thread_0.join(); 32
回答1件
あなたの回答
tips
プレビュー