多数のアトミック プロパティの代わりに GCD を使用しようとしています。WWDC で、GCD は効率的なトランザクション ロック メカニズムに使用できると話していたのを覚えています。
私の OpenGL ES ランループ メソッドではdispatch_sync
、カスタム作成されたシリアル キューで実行されるブロックにすべての描画コードを配置しました。runloop は、私の知る限り、メインスレッドで発生している CADisplayLink によって呼び出されます。
描画だけでなく、描画されるものを制御するためにも使用される ivar とプロパティがあります。問題は、同時実行の問題を防ぐために何らかのロックが必要であり、2 つの描画フレーム間でメイン スレッドから OpenGL ES シーンの状態をトランザクション的にクエリおよび変更する方法が必要なことです。
そのシリアル キューでブロックを実行することにより、GCD を使用してトランザクションの方法でプロパティのグループを変更できます。
しかし、描画コードを実行するキューをブロックしている間、GCD を使用してメイン スレッドに値を読み取ることができないようです。戻り値はありませんが、読み取りと書き込みの両方で、2 つのフレームの描画の間dispatch_synch
に正確にプレゼンテーション値にアクセスしたいと考えています。
barrier
彼らが話していたのはこのことですか?それはどのように機能しますか?