質問

GLKViewのサイズが変更されると、そのGLKViewのバッファーとコンテキストで行われる舞台裏の操作がいくつかあります。これらの舞台裏の操作を実行するのにかかる時間の間、GLKViewに描画しても、正しい結果は生成されません。

私のシナリオでは、GLKViewが有効になっているsetNeedsDisplayがあるので、画面上のコンテンツを更新する必要があるときはいつでも、その上で-setNeedsDisplayを呼び出すだけです。 GLKView。私はGLKViewを使用して画像を描画しているので、別のサイズの画像を描画する必要がある場合は、GLKViewのサイズも変更する必要があります。

問題:GLKViewのサイズを変更し、そのビューでsetNeedsDisplayを呼び出すと、画面の結果が正しくありません。これは、GLKViewが、新しい画像を描画しようとする前に、新しいサイズ変更によって呼び出された舞台裏の操作を終了していないためです。

これに対する回避策は、performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0setNeedsDisplayだけでなく、GLKViewと呼ぶことで見つけました。これにより、基本的に、メインスレッドは、setNeedsDisplayを呼び出す前に、すべての舞台裏のopenGL操作が完了するのを待つように強制されます。これは問題なく機能しますが、もっと良い解決策があるかどうか疑問に思っています。たとえば、スレッドがすべてのopenGL操作が完了するのを待ってから続行するようにするopenGL呼び出しはありますか?

役に立ちましたか?

解決

解決策は、CIContextのサイズが変更された後にGLKViewオブジェクトをリセットすることでした。
何もありがとう、みんな!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top