GLKViewのサイズ変更
-
27-10-2019 - |
質問
GLKView
のサイズが変更されると、そのGLKView
のバッファーとコンテキストで行われる舞台裏の操作がいくつかあります。これらの舞台裏の操作を実行するのにかかる時間の間、GLKView
に描画しても、正しい結果は生成されません。
私のシナリオでは、GLKView
が有効になっているsetNeedsDisplay
があるので、画面上のコンテンツを更新する必要があるときはいつでも、その上で-setNeedsDisplay
を呼び出すだけです。
GLKView
。私はGLKView
を使用して画像を描画しているので、別のサイズの画像を描画する必要がある場合は、GLKView
のサイズも変更する必要があります。
問題:GLKView
のサイズを変更し、そのビューでsetNeedsDisplay
を呼び出すと、画面の結果が正しくありません。これは、GLKView
が、新しい画像を描画しようとする前に、新しいサイズ変更によって呼び出された舞台裏の操作を終了していないためです。
これに対する回避策は、performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0
のsetNeedsDisplay
だけでなく、GLKView
と呼ぶことで見つけました。これにより、基本的に、メインスレッドは、setNeedsDisplay
を呼び出す前に、すべての舞台裏のopenGL操作が完了するのを待つように強制されます。これは問題なく機能しますが、もっと良い解決策があるかどうか疑問に思っています。たとえば、スレッドがすべてのopenGL操作が完了するのを待ってから続行するようにするopenGL呼び出しはありますか?
解決
解決策は、CIContext
のサイズが変更された後にGLKView
オブジェクトをリセットすることでした。
何もありがとう、みんな!