2013-03-29 3 views
11

OpenGL hat a number of functions, die Zeiger direkt nehmen. Einige von ihnen read data from those pointers, andere write data to those pointers.Wann wird OpenGL mit Zeigern in Funktionen fertig?

OpenGL-Funktionen werden jedoch oft nicht sofort ausgeführt. Wenn Sie etwas zeichnen, dauert es normalerweise eine Weile, bis die Zeichnung fertig ist.

Also woher weiß ich, wenn OpenGL mit einem Zeiger fertig ist, gebe ich es?

+2

+1 Für die Initiative, ein Frage/Antwort-Paar rein für Bildungszwecke zu posten. Ich bin selbst neugierig geworden und es ist schön, eine konkrete Referenz zu haben, falls ich eine Auffrischung benötige. Weiter so Nicol! –

Antwort

11

Alle OpenGL-Funktionen, mit Ausnahme der unten aufgeführten Ausnahmen, werden mit jedem Zeiger beendet, den Sie beim Zurückgeben dieser Funktion angeben. So glReadPixels wird alle Pixel lesen und Formatkonvertierung bei seiner Rückkehr abgeschlossen haben. Deshalb ist asynchronous pixel transfer so wichtig für Lesevorgänge. Es erlaubt OpenGL zu nicht das tun, um nicht mit der GPU zu synchronisieren.

Die einzige Ausnahme von dieser Regel ist jede Funktion, die mit dem Wort "Pointer" endet. Dinge wie glVertexAttribPointer, glTexCoordPointer und dergleichen. Wenn Sie clientseitigen Speicher mit diesen Funktionen verwenden (im Kernprofil OpenGL 3.2+ nicht mehr zulässig), speichern diese Funktionen einen Zeiger auf diesen Speicher. Daher müssen Sie sicherstellen, dass dieser Zeiger so lange gültig ist, wie Sie mit diesen Scheitelpunktattributen rendern möchten.

Nach jedem Rendering-Aufruf, der Client-Speicher verwendet, erfordert OpenGL, dass die Implementierung das Lesen aus dem Client-Speicher beendet hat, wenn die Rendering-Funktion zurückgegeben wird. So können Sie glDrawArrays anrufen, dann löschen Sie die Zeiger in Frage. Und solange du keinen weiteren Draw-Call machst, bis du diese Zeiger geändert hast, geht es dir gut. Dies bedeutet, dass OpenGL alle relevanten Vertex-Daten kopiert haben muss, bis der Rendering-Aufruf zurückkehrt (einer der Gründe, warum Pufferobjekte schneller sind).

Verwandte Themen