glFeedbackBuffer

Aus DGL Wiki
Version vom 17. September 2004, 18:13 Uhr von Flash (Diskussion | Beiträge) (Version Hochgeladen)

Wechseln zu: Navigation, Suche
Hinweis: Dieser Artikel ist noch unvollständig.
(Mehr Informationen/weitere Artikel)

{{{1}}}

Incomplete.jpg

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:

  1. buffer ist ein Zeiger auf ein Feld von Fließkommazahlen in das die Feedbackinformationen eingetragen werden.
  2. size gibt die Größe des Feldes an.
  3. 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