8

OpenGL で同期オブジェクトを使用できるシナリオを探しています。私の理解では、一度GLコマンドストリームに入れられた同期オブジェクト( glFenceSync() を使用)は、すべてのGLコマンドが実行されて実現された後に通知されます。同期オブジェクトが同期プリミティブである場合、手動でシグナルを送信できないのはなぜですか? この機能が GL プログラマーに役立つのはどこでしょうか?

次のシナリオは正しいですか?

Thread 1 :

Load model
Draw()
glFenceSync()

Thread 2 :

glWaitSync();
ReadPixels
Use data for subsequent operation.

これは、 Thread 1 で glFenceSync() が呼び出されない限り、スレッド 2 を起動できないということですか?

4

1 に答える 1

9

フェンスは、スレッドを同期するためのものではなく、非同期操作がいつ終了したかを知るためのものです。たとえばglReadPixels、ピクセル バッファー オブジェクト (PBO) に対して を実行する場合、PBO からの読み取りまたはクライアント アドレス空間へのマップを試行する前に、読み取りが完了したことを知りたい場合があります。

PBO をターゲットにして a を実行するglReadPixelsと、呼び出しはすぐに返されますが、データ転送には時間がかかる場合があります。そこで便利なのがフェンスです。

于 2013-02-28T14:26:08.560 に答える