glFeedbackBuffer
(Mehr Informationen/weitere Artikel) {{{1}}} |
Inhaltsverzeichnis
glFeedbackBuffer
Name
glFeedbackBuffer - steuert den Feedback Modus.
Delphi-Spezifikation
procedure glFeedbackBuffer(size: TGLsizei; _type: TGLenum; buffer: PGLfloat);
Parameter
size | Bestimmt die maximale Anzahl Einträge die in den Puffer geschrieben werden können. |
_type | Bestimmt eine symbolische Konstante die bestimmt, welche Informationen für jeden Vertex zurückgeliefert werden. Akzeptiert werden: GL_2D, GL_3D, GL_3D_COLOR, GL_3D_COLOR_TEXTURE, und GL_4D_COLOR_TEXTURE. |
buffer | Liefert die Feedbackdaten zurück. |
Beschreibung
glFeedbackBuffer steuert das Feedback. Feedback ist, genau wie Selektion, ein GL-Modus. Der Mudus kann über einen Aufruf von glRenderMode mit GL_FEEDBACK ausgewählt werden. Wenn die GL im Feedbackmodus ist, werden keine Pixel durch die Rasterierung produziert. Anstelle dessen werden Informationen bezüglich der Primitive die gerastert worden wären zur Anwendung, über den FeedbackBuffer, zurückgeliefert.
glFeedbackBuffer hat drei Parameter:
- buffer ist ein Zeiger auf ein Feld von Fließkommazahlen in das die Feedbackinformationen eingetragen werden.
- size gibt die Größe des Feldes an.
- type ist eine symbolische Konstante welche die Informationen beschreibt, die für jeden Vertex in das Feld eingetragen werden.
glFeedbackBuffer muss aufgerufen werden bevor der Feedbackmodus aktiviert wird (durch einen Aufruf von glRenderMode mit dem Argument GL_FEEDBACK). Aktivieren des Feedbackmodus ohne vorheriges Aufsetzen eines Feedbackbuffers oder ein Aufruf von glFeedbackBuffer wenn die GL bereits im Feedbackmodus ist führen zu einem OpenGL Fehler. (siehe Abschnitt Fehlermeldungen)
Um den Feedbackmodus wieder zu verlassen rufen Sie glRenderMode mit einem anderen Parameter als GL_FEEDBACK auf. Wenn Sie dies tun während die GL im Feedbackmodus ist (Dies muss ja gegeben sein, denn schließlich wollen Sie den Modus ja ändern.), liefert glRenderMode die nzahl der Einträge im Feedbackbuffer (dem oben genannten Feld) zurück. Dieser zurückgelieferte Wert ist übersteigt niemals size. Wenn in buffer nicht genug Platz war um alle Daten unter zu bringen, liefert glRenderMode einen negativen Wert zurück.
While in feedback mode, each primitive that would be rasterized generates a block of values that get copied into the feedback array. If doing so would cause the number of entries to exceed the maximum, the block is partially written so as to fill the array (if there is any room left at all), and an overflow flag is set. Each block begins with a code indicating the primitive type, followed by values that describe the primitives vertexes and associated data. Entries are also written for bitmaps and pixel rectangles. Feedback occurs after polygon culling and glPolyMode interpretation of polygons has taken place, so polygons that are culled are not returned in the feedback buffer. It can also occur after polygons with more than three edges are broken up into triangles, if the GL implementation renders polygons by performing this decomposition.
Der Befehl glPassThrough kann benutzt werden um eine Markierung in den Feedbackbuffer einzufügen.
Nachfolgend finden Sie die Grammatik für die Datenblöcke die in den Feedbackpuffer geschrieben werden.
Jedes Primitiv wird durch einen einmaligen Identifikationswert gefolgt von einer Menge von Vertices beschrieben.
Einträge von Polygonen enthalten einen Integerwert der angibt wie viele Vertices folgen.
Jeder Vertex wird durch eine Reihe von Fließkommazahlen zurückgeliefert. (type bestimmt dabei welche Zahlen angegeben werden.)
Farben werden als vier Werte im RGBA-Modus und als Einzelwert im Farbindexmodus zurückgeliefert.
feedbackList <-- feedbackItem feedbackList | feedbackItem feedbackItem <-- point | lineSegment | polygon | bitmap | pixelRectangle | passThru point <-- GL_POINT_TOKEN vertex lineSegment <-- GL_LINE_TOKEN vertex vertex | GL_LINE_RESET_TOKEN vertex vertex polygon <-- GL_POLYGON_TOKEN n polySpec polySpec <-- polySpec vertex | vertex vertex vertex bitmap <-- GL_BITMAP_TOKEN vertex pixelRectangle <-- GL_DRAW_PIXEL_TOKEN vertex | GL_COPY_PIXEL_TOKEN vertex passThru <-- GL_PASS_THROUGH_TOKEN Wert vertex <-- 2d | 3d | 3dColor | 3dColorTexture | 4dColorTexture 2d <-- Wert Wert 3d <-- Wert Wert Wert 3dColor <-- Wert Wert Wert color 3dColorTexture <-- Wert Wert Wert color tex 4dColorTexture <-- Wert Wert Wert Wert color tex color <-- rgba | index rgba <-- Wert Wert Wert Wert index <-- Wert tex <-- Wert Wert Wert Wert
Der Parameter Wert ist eine Fließkommazahl, and n is a floating-point integer giving the number of vertexes in the polygon. GL_POINT_TOKEN, GL_LINE_TOKEN, GL_LINE_RESET_TOKEN, GL_POLYGON_TOKEN, GL_BITMAP_TOKEN, GL_DRAW_PIXEL_TOKEN, GL_COPY_PIXEL_TOKEN and GL_PASS_THROUGH_TOKEN are symbolic floating-point constants. GL_LINE_RESET_TOKEN is returned whenever the line stipple pattern is reset. The data returned as a vertex depends on the feedback type.
Die folgende Tabelle gibt eine Übersicht der Typen und der Anzahl von Werten die pro Vertex in den Feedbackpuffer geschrieben werden.
(k ist 1 im Farbindexmodus und 4 im RGBA-Modus.)
Type | Koordinaten | Farbe | Textur | Werte insgesamt |
---|---|---|---|---|
GL_2D | x, y | 2 | ||
GL_3D | x, y, z | 3 | ||
GL_3D_COLOR | x, y, z | k | 3 + k | |
GL_3D_COLOR_Texture | x, y, z | k | 4 | 7 + k |
GL_4D_COLOR_Texture | x, y, z, w | k | 4 | 8 + 8 |
Feedback vertex coordinates are in window coordinates, except w, which is in clip coordinates. Feedback colors are lighted, if lighting is enabled. Feedback texture coordinates are generated, if texture coordinate generation is enabled. They are always transformed by the texture matrix.
Hinweise
The glFeedbackBuffer function, when used in a display list, is not compiled into the display list but rather is executed immediately.
Fehlermeldungen
GL_INVALID_ENUM wird generiert wenn type ein ungültiger Wert übergeben wird.
GL_INVALID_VALUE wird generiert wenn size ein negativer Wert übergeben wird.
GL_INVALID_OPERATION wird generiert wenn der Rendermodus bereits GL_FEEDBACK ist und glFeedbackBuffer aufgerufen wird oder wenn glRenderMode mit dem Argument GL_FEEDBACK aufgerufen wird bevor glFeedbackBuffer nicht mindestens einmal aufgerufen wurde.
GL_INVALID_OPERATION wird generiert wenn glFeedbackBuffer innerhalb eines glBegin-glEnd Blocks aufgerufen wird.
Zugehörige Wertrückgaben
glGet mit Token GL_RENDER_MODE
Siehe auch
glBegin, glLineStipple, glPassThrough, glPolygonMode, glRenderMode, glSelectBuffer