1

GLES 2.0の呼び出しは、AndroidとiOSで同期または非同期ですか?いつCPUをブロックし、GPUが送信されたコマンドを完了するのを待ちますか?glReadPixelsとglGetTexImageは間違いなくスレッドをブロックし、すべてのglコマンドが完了するのを待つと思います。

いくつかのテストの後、GL呼び出しは同期的であり、GPUはCPUをブロックするため、マルチスレッドアプリはシングルコアデバイスでもパフォーマンスを向上させる可能性があると感じています。

gl *呼び出しが同期しているか、iOSとAndroidで同期していないかの参照はありますか?私は一般的にそれが同期していないことを知っています。

2つのスレッドを持つことは理にかなっていますか?1つのスレッドはGL呼び出しを行い、もう1つのスレッドは物理演算を実行して、GLがメインスレッドをブロックするときにCPUに何らかの作業を提供しますか?

4

1 に答える 1

2

ほとんどのOpenGLコマンドは、プログラムの実行をブロックしません。状態を設定したり、描画呼び出しを発行したりするものはすべて、コマンドをGPUプッシュバッファーに入れて、すぐに戻ります。コマンドがGPUに到達するのを待つ必要はなく、次のコマンドが発行される前にモデルの描画が完了するのを待つ必要もありません。

例外は、操作など、GPUに状態を要求するものglGet.../glRead...です。これには、GPUが正しい値を返すことができるように、その命令キューをフラッシュする必要があります。これらは長時間のストールを引き起こす可能性があるため、必要に応じて慎重に使用することをお勧めします。

2つのスレッドを持つことは理にかなっていますか?1つのスレッドはGL呼び出しを行い、もう1つのスレッドは物理演算を実行して、GLがメインスレッドをブロックするときにCPUに何らかの作業を提供しますか?

場合によります。一般に、GPUを待ってストールしている場合は、計算を続行するためにすぐに何らかの値を取得する必要があるためです。これに依存しないバックグラウンドで実行できる作業がある場合は、それを別のスレッドにオフロードするのが理にかなっています。

于 2012-08-11T00:17:00.943 に答える