Verwendung von Fence-Sync-Objekten in OpenGL

8

Ich versuche, nach Szenarien zu suchen, in denen Sync-Objekte in OpenGL verwendet werden können. Mein Verständnis ist, dass ein Sync-Objekt, das einmal in den GL-Befehlsstrom (unter Verwendung von glFenceSync ()) gesetzt wird, signalisiert wird, nachdem alle GL-Befehle ausgeführt und realisiert wurden. Wenn die Synchronisationsobjekte Synchronisierungsgrundelemente sind, warum können wir sie dann MANUELL nicht signalisieren? Wo genau kann diese Funktionalität dem GL-Programmierer helfen?

Ist das folgende Szenario korrekt?

%Vor%

Bedeutet dies, dass ich Thread 2 nicht starten kann, wenn nicht glFenceSync () in Thread 1 aufgerufen wird?

    
maverick9888 28.02.2013, 13:40
quelle

1 Antwort

8

Zäune sind nicht so sehr zum Synchronisieren von Threads gedacht, sondern um zu wissen, wann asynchrone Operationen beendet sind. Wenn Sie beispielsweise ein glReadPixels in ein Pixel-Pufferobjekt (PBO) eingeben, möchten Sie vielleicht wissen, dass das Lesen abgeschlossen wurde, bevor Sie versuchen, das PBO in den Clientadressraum einzulesen oder zu mappen.

>

Wenn Sie ein glReadPixels mit einem PBO als Ziel verwenden, wird der Aufruf sofort zurückgegeben, aber die Datenübertragung kann tatsächlich etwas dauern. Hier kommen Zäune zum Einsatz.

    
datenwolf 28.02.2013, 14:26
quelle