glFeedbackBuffer: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Version Hochgeladen)
()
Zeile 1: Zeile 1:
{{Unvollständig}}
 
 
= glFeedbackBuffer =
 
= glFeedbackBuffer =
  
Zeile 43: Zeile 42:
 
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.
 
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.
  
<b><i>
+
Während man sich im Feedbackmodus befindet, generiert jede [[Primitive]] die rasterisiert werden würde einen Werteblock, der in das Feedbackarray kopiert wird. Wenn dies die Zahl der Einträge im Puffer überschreiben würde, dann wird dieser Werteblock teilweise in das Array geschrieben, so dass dieses Array komplett gefüllt wird (vorausgesetzt es ist noch Platz darin), und ein Überlauf-Flag wird gesetzt. Jeder Block beginnt mit einem Code, der den Primitiventyp beschreibt, gefolgt von Werten die die Eckpunkte und zugehörige Daten der Primitive beschreiben. Einträge für Bitmaps und Pixelrechtecke werden auch geschrieben.
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.
+
Feedback findet statt, nachdem das Polygon gecullt wurde und [[glPolygonMode]] interptretiert wurde, so dass gecullte Polygone nicht im Feedbackpuffer landen. Er kann auch stattfinden, nachdem (je nach GL-Implementation) Polygone von der Implementation in Dreiecke zerlegt wurden.
</i></b>
 
  
 
Der Befehl [[glPassThrough]] kann benutzt werden um eine Markierung in den Feedbackbuffer einzufügen.
 
Der Befehl [[glPassThrough]] kann benutzt werden um eine Markierung in den Feedbackbuffer einzufügen.
Zeile 75: Zeile 73:
 
  tex            <-- ''Wert'' ''Wert'' ''Wert'' ''Wert''  
 
  tex            <-- ''Wert'' ''Wert'' ''Wert'' ''Wert''  
  
Der Parameter ''Wert'' ist eine Fließkommazahl,
+
Der Parameter ''Wert'' ist eine Fließkommazahl, und ''n'' ist ein Fließkommawert (der allerdings nur Ganzzahlwerte enthält) der die Zahl der Eckpunkte des Polygons angibt. '''GL_POINT_TOKEN''', '''GL_LINE_TOKEN''', '''GL_LINE_RESET_TOKEN''', '''GL_POLYGON_TOKEN''', '''GL_BITMAP_TOKEN''', '''GL_DRAW_PIXEL_TOKEN''', '''GL_COPY_PIXEL_TOKEN''' und '''GL_PASS_THROUGH_TOKEN'''
<b><i>
+
sind symbolische Fließkommakonstanten. '''GL_LINE_RESET_TOKEN''' wird zurückgeliefert, sobald das Muster für die Linienmusterung zurückgesetzt wird. Die als Eckpunkte zurückgegebenen Daten hängen vom Feedbacktyp ab.
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.
 
</i></b>
 
  
 
Die folgende Tabelle gibt eine Übersicht der Typen und der Anzahl von Werten die pro Vertex in den Feedbackpuffer geschrieben werden.<br>
 
Die folgende Tabelle gibt eine Übersicht der Typen und der Anzahl von Werten die pro Vertex in den Feedbackpuffer geschrieben werden.<br>
Zeile 97: Zeile 93:
 
|}
 
|}
  
<b><i>
+
Eckpunkt-Koordinaten im Feeebackmodus werden als Fensterkoordinaten zurückgegeben, ausgenommen der w-Komponente, die in Clip-Koordinaten zurückgegeben wird. Farbwerte im Feedbackpuffer werden beleuchtet, sofern Beleuchtung aktiv ist. Texturkoordinaten im Feedbackmodus werden generiert, wenn Texturkoordinatengenerierung aktiv ist. Sie werden ausserdem immer durch die Texturmatrix transformiert.
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.
 
</i></b>
 
  
 
<br>
 
<br>
 
== Hinweise ==
 
== Hinweise ==
<b><i>
+
Die '''glFeedBackBuffer'''-Funktion wird NICHT in eine Displayliste kompiliert wenn sie dort aufgerufen wird, sondern dann direkt ausgeführt.
The glFeedbackBuffer function, when used in a display list, is not compiled into the display list but rather is executed immediately.  
 
</i></b>
 
  
 
<br>
 
<br>

Version vom 20. September 2004, 13:53 Uhr

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.

Während man sich im Feedbackmodus befindet, generiert jede Primitive die rasterisiert werden würde einen Werteblock, der in das Feedbackarray kopiert wird. Wenn dies die Zahl der Einträge im Puffer überschreiben würde, dann wird dieser Werteblock teilweise in das Array geschrieben, so dass dieses Array komplett gefüllt wird (vorausgesetzt es ist noch Platz darin), und ein Überlauf-Flag wird gesetzt. Jeder Block beginnt mit einem Code, der den Primitiventyp beschreibt, gefolgt von Werten die die Eckpunkte und zugehörige Daten der Primitive beschreiben. Einträge für Bitmaps und Pixelrechtecke werden auch geschrieben. Feedback findet statt, nachdem das Polygon gecullt wurde und glPolygonMode interptretiert wurde, so dass gecullte Polygone nicht im Feedbackpuffer landen. Er kann auch stattfinden, nachdem (je nach GL-Implementation) Polygone von der Implementation in Dreiecke zerlegt wurden.

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, und n ist ein Fließkommawert (der allerdings nur Ganzzahlwerte enthält) der die Zahl der Eckpunkte des Polygons angibt. GL_POINT_TOKEN, GL_LINE_TOKEN, GL_LINE_RESET_TOKEN, GL_POLYGON_TOKEN, GL_BITMAP_TOKEN, GL_DRAW_PIXEL_TOKEN, GL_COPY_PIXEL_TOKEN und GL_PASS_THROUGH_TOKEN sind symbolische Fließkommakonstanten. GL_LINE_RESET_TOKEN wird zurückgeliefert, sobald das Muster für die Linienmusterung zurückgesetzt wird. Die als Eckpunkte zurückgegebenen Daten hängen vom Feedbacktyp ab.

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

Eckpunkt-Koordinaten im Feeebackmodus werden als Fensterkoordinaten zurückgegeben, ausgenommen der w-Komponente, die in Clip-Koordinaten zurückgegeben wird. Farbwerte im Feedbackpuffer werden beleuchtet, sofern Beleuchtung aktiv ist. Texturkoordinaten im Feedbackmodus werden generiert, wenn Texturkoordinatengenerierung aktiv ist. Sie werden ausserdem immer durch die Texturmatrix transformiert.


Hinweise

Die glFeedBackBuffer-Funktion wird NICHT in eine Displayliste kompiliert wenn sie dort aufgerufen wird, sondern dann direkt ausgeführt.


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