buffer = gl.FeedbackBuffer(size, type)
gl.FeedbackBuffer()
steuert die Rückmeldung. Feedback ist wie
die Auswahl ein GL-Modus. Der Modus wird durch Aufruf von gl.RenderMode()
mit #GL_FEEDBACK
ausgewählt. Wenn sich GL im Feedback-Modus befindet,
werden durch die Rasterung keine Pixel erzeugt. Stattdessen werden
Informationen über Grundelemente, die gerastert worden wären, mit Hilfe des
GL an die Anwendung zurückgegeben.
gl.FeedbackBuffer()
hat zwei Argumente: size
gibt die Größe des Feldes an, das
in Elementen von #GL_FLOAT
zurückgegeben werden soll. type
ist eine symbolische
Konstante, die die Informationen beschreibt, die für jeden Knoten zurückgegeben
werden. gl.FeedbackBuffer()
muss ausgegeben werden, bevor der Feedback-Modus
aktiviert wird (durch Aufruf von gl.RenderMode() mit
dem Argument #GL_FEEDBACK
). Das Setzen von #GL_FEEDBACK
ohne Einrichtung des
Feedback-Puffers oder der Aufruf von gl.FeedbackBuffer()
, während sich
GL im Feedback-Modus befindet, ist ein Fehler.
Wenn gl.RenderMode() im Feedback-Modus aufgerufen wird,
gibt er die Anzahl der Einträge im Feedback-Feld zurück und setzt den
Feedback-Feldzeiger auf die Basis des Feedback-Puffers zurück. Der
zurückgegebene Wert überschreitet nie die Größe. Wenn die
Feedback-Daten mehr Platz benötigten, als im Puffer verfügbar war,
gibt gl.RenderMode() einen negativen Wert zurück.
Um GL aus dem Feedback-Modus zu nehmen, rufen Sie gl.RenderMode()
mit einem Parameter-Wert anders als #GL_FEEDBACK
auf.
Im Feedback-Modus erzeugt jedes Grundelement, Bitmap oder Pixelrechteck, das gerastert werden soll, einen Block von Werten, die in das Feedback-Feld kopiert werden. Wenn dies dazu führen würde, dass die Anzahl der Einträge das Maximum übersteigt, wird der Block teilweise so geschrieben, um das Feld zu füllen (wenn überhaupt noch Platz vorhanden ist) und ein Überlauf-Flag gesetzt. Jeder Block beginnt mit einem Code, der den Grundelement-Typ angibt, gefolgt von Werten, die die Knoten des Grundelements und die zugehörigen Daten beschreiben. Einträge werden auch für Bitmaps und Pixelrechtecke geschrieben. Die Rückmeldung erfolgt nach dem Polygonauslesen und gl.PolygonMode(). Die Interpretation von Polygonen hat stattgefunden, so dass Polygone, die gerendert werden, nicht im Feedback-Puffer zurückgegeben werden. Sie kann auch auftreten, wenn Polygone mit mehr als drei Kanten in Dreiecke zerlegt werden, wenn die GL-Implementierung Polygone rendert, indem man diese Zerlegung durchführt.
Der Befehl gl.PassThrough() kann verwendet werden, um eine Markierung in den Feedback-Puffer einzufügen. Siehe gl.PassThrough für Details.
Es folgt die Grammatik für die Blöcke von Werten, die in den Feedback-Puffer geschrieben werden. Jedes Grundelement wird mit einem eindeutigen Identifizierungswert angezeigt, gefolgt von einer bestimmten Anzahl von Knoten. Polygon-Einträge enthalten einen ganzzahligen Wert, der angibt, wie viele Knoten folgen. Ein Knoten wird je nach Typ als eine bestimmte Anzahl von Gleitkommawerten zurückgegeben. Farben werden als vier Werte im RGBA-Modus und ein Wert im Farbindex-Modus zurückgegeben.
Die Koordinaten der Feedback-Eckpunkte sind als Fensterkoordinaten angegeben, außer w, das als Clip-Koordinaten zurückgegeben wird. Die Feedback-Farben leuchten, wenn die Beleuchtung aktiviert ist. Feedback-Texturkoordinaten werden erzeugt, wenn die Generierung von Texturkoordinaten aktiviert ist. Sie werden immer von der Texturmatrix transformiert.
gl.FeedbackBuffer()
wird bei Verwendung in einer Display-Liste nicht in
die Display-Liste kompiliert, sondern sofort ausgeführt.
Bitte beachten Sie, dass gl.FeedbackBuffer()
nur die Texturkoordinate
der Textureinheit #GL_TEXTURE0
zurückgibt.
Um einen von diesem Befehl zugewiesenen Puffer freizugeben, rufen Sie den Befehl gl.FreeFeedbackBuffer() auf. Siehe gl.FreeFeedbackBuffer für Details.
Weitere Informationen finden Sie in einem OpenGL-Referenzhandbuch.
#GL_2D
, #GL_3D
, #GL_3D_COLOR
, #GL_3D_COLOR_TEXTURE
und #GL_4D_COLOR_TEXTURE
werden akzeptiert#GL_INVALID_ENUM
wird erzeugt, wenn type
kein akzeptierter Wert ist.
#GL_INVALID_VALUE
wird erzeugt, wenn size
negativ ist.
#GL_INVALID_OPERATION
wird erzeugt, wenn gl.FeedbackBuffer()
aufgerufen wird,
während der Rendermodus #GL_FEEDBACK
ist oder wenn gl.RenderMode()
mit dem Argument #GL_FEEDBACK
aufgerufen wird, bevor gl.FeedbackBuffer()
mindestens
einmal aufgerufen wurde.
#GL_INVALID_OPERATION
wird erzeugt, wenn gl.FeedbackBuffer()
zwischen
gl.Begin() und gl.End() ausgeführt wird.
#GL_RENDER_MODE
gl.Get() mit dem Argument #GL_FEEDBACK_BUFFER_POINTER
gl.Get() mit dem Argument #GL_FEEDBACK_BUFFER_SIZE
gl.Get() mit dem Argument #GL_FEEDBACK_BUFFER_TYPE