6

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

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

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

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

4

1 に答える 1

9

解決策は、サイズ変更CIContext後にオブジェクトをリセットすることでした。GLKView

于 2012-04-07T22:57:27.327 に答える