私は Cocoa OpenGL アプリを作成し、このテクニカル ノートCVDisplayLink
に従ってメイン ループを実行しています。ループの実行には問題なく機能します。
問題は、終了すると、アプリケーションが既に終了した後、表示リンクのコールバックが独自のスレッドで呼び出されることがあるということです。これにより、レンダリング コードが呼び出され、OpenGL 関数 (この場合) を呼び出すとすぐにクラッシュしますglClear
。これは、コンテキストが存在しなくなるためです。
私はCVDisplayLinkRelease(displayLink);
NSViewのdealloc
機能を持っていますが、呼び出されないようです.ARCが原因だと思います. ビューの前に表示リンクが確実に破棄されるようにする方法はありますか?
編集:クラッシュが実際に私が持っているアサートによってトリガーされていることに気づきませんでした。glGetError
バグを早期に発見できるように、OpenGL を呼び出すたびにアサートします。glClear
またはを呼び出した後、[[view openGLContext] flushBuffer];
エラー 1286 が表示されますGL_INVALID_FRAMEBUFFER_OPERATION
。
私のウィンドウとビューの割り当てが解除されているため、これは論理的に理にかなっていますが、問題は解決しません。これらのエラーは、明らかにこれ以外にも発生する可能性があるため、単に無視したくありません。ビューの前に表示リンクが確実にシャットダウンされるようにする「正しい」方法を見つける必要があります。