glDrawArrays: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (GlDrawArrays wurde nach glDrawArrays verschoben)
(an manpages angepasst)
Zeile 1: Zeile 1:
 
=glDrawArrays=
 
=glDrawArrays=
  
'''glDrawArrays''' - Erlaubt es mehrere [[Primitive]] auf einmal zu zeichnen
+
'''glDrawArrays''' - Erlaubt es mehrere [[Primitive]] auf einmal zu zeichnen.
  
 
<br>
 
<br>
Zeile 16: Zeile 16:
 
|-
 
|-
 
| ''mode''
 
| ''mode''
| Bestimmt welche Primitiven anhand der Vertexe gezeichnet werden sollen.<br> Es können die gleichen Werte wie bei [[glBegin]] übergeben werden:<br>'''GL_POINTS''', '''GL_LINE_STRIP''', '''GL_LINE_LOOP''', '''GL_LINES''', '''GL_TRIANGLE_STRIP''', '''GL_TRIANGLE_FAN''', '''GL_TRIANGLES''', '''GL_QUAD_STRIP''', '''GL_QUADS''', und '''GL_POLYGON'''.
+
| Bestimmt, welche Primitiven anhand der Vertexe gezeichnet werden sollen.<br> Es können die gleichen Werte wie bei [[glBegin]] übergeben werden:<br>'''GL_POINTS''', '''GL_LINE_STRIP''', '''GL_LINE_LOOP''', '''GL_LINES''', '''GL_TRIANGLE_STRIP''', '''GL_TRIANGLE_FAN''', '''GL_TRIANGLES''', '''GL_QUAD_STRIP''', '''GL_QUADS''', und '''GL_POLYGON'''.
 
|-
 
|-
 
| ''first''
 
| ''first''
| Legt fest welches Element des Array das erste sein soll.
+
| Definiert den Startindex der aktivierten Arrays.
 
|-
 
|-
 
| ''count''
 
| ''count''
| Legt fest wieviele Elemente gezeichnet werden sollen,
+
| Definiert die Anzahl der Indizes, die gerendert werden sollen.
 
|}
 
|}
  
 
<br>
 
<br>
 
== Beschreibung ==
 
== Beschreibung ==
 +
'''glDrawArrays''' definiert mehrere geometrische Primitiven mit sehr wenig Unterfunktionsaufrufen. Anstatt eine OpenGL-Funktion aufzurufen, um jedes einzelne [[glVertex|Vertex]], [[glEdgeFlag|Kantenflag]], jede [[glColor|Farbe]], [[glSecondaryColor|Zweitfarbe]], [[glNormal|Normale]], [[glTexCoord|Textur-]] und [[glFogCoord|Nebelkoordinate]] zu übergeben, kann man getrennte Vertex-, Normalen- und Farb-Arrays vordefinieren und diese benutzen, um eine Folge an Primitiven mit einem einzigen Aufruf von '''glDrawArrays''' zu konstruieren.
  
'''glDrawArrays''' erlaubt es mehre [[Primitive]] mit nur einem Befehl zu zeichnen.  
+
Wenn '''glDrawArrays''' aufgerufen wird, benutzt die Funktion ''count'' aufeinanderfolgende Elemente von jedem aktiviertem Array um eine Folge an geometrischen Primitiven zu konstruieren, beginnend mit Element ''first''. ''mode'' definiert, welche Art von Primitiven konstruiert wird und wie die Arrayelemente diese Primitiven konstruieren. Falls '''GL_VERTEX_ARRAY''' nicht aktiviert ist, werden keine geometrischen Primitiven erzeugt.
Die benötigten Infomationen werden aus den mit [[glEnableClientState]]  aktivierten Arrays bezogen.
+
 
 +
Vertex-Attribute, die von '''glDrawArrays''' verändert werden, haben einen undefinierten Wert, nachdem der Aufruf von '''glDrawArrays''' beendet ist. Ist z.B. '''GL_COLOR_ARRAY''' aktiviert, ist der Wert der aktuellen Farbe undefiniert, nachdem '''glDrawArrays''' ausgeführt wird. Attribute, die nicht verändert werden, bleiben wohldefiniert.
 +
 
 +
 
 +
Der Effekt von '''glDrawArrays''' ist derselbe wie :
 +
glBegin(''mode'');
 +
    FOR i := 0 TO ''count'' - 1 DO BEGIN
 +
        [[glArrayElement]](''first'' + i);
 +
    END;
 +
  glEnd();
  
 
<br>
 
<br>
 
== Hinweise ==
 
== Hinweise ==
 +
''glDrawArrays'' ist nur ab GL Version 1.1 oder höher verfügbar.
  
Nach dem Aufruf dieser Funktion sind die aktuellen Werte, von dennen ein Array genutzt wurde, nicht definiert. Wurde etwa GL_COLOR_ARRAY aktiviert dann ist nach dem Aufruf dieser Funktion nicht festgelegt was die aktuelle Farbe ist.
+
Der Befehl '''glDrawArrays''' kann in [[Displaylisten]] verwendet werden. Dadurch werden alle Daten aus den Arrays in die Liste übernommen.
 
 
Der Befehl glDrawArrays kann in [[Displaylisten]] verwendet werden. Dadurch werden alle Daten aus den Arrays in die Liste übernommen.
 
  
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
;GL_INVALID_VALUE :'''''Count''''' hatte einen negativen Wert
+
;GL_INVALID_VALUE: ''count'' hatte einen negativen Wert.
;GL_INVALID_ENUM: '''''mode''''' hatte einen ungültigen Wert
+
;GL_INVALID_ENUM: ''mode'' hatte einen ungültigen Wert.
;GL_INVALID_OPERATION: glDrawArrays wurde zwischen [[glBegin]] und dem dazugehörigen [[glEnd]] aufgerufen.
+
;GL_INVALID_OPERATION: '''glDrawArrays''' wurde zwischen [[glBegin]] und dem dazugehörigen [[glEnd]] aufgerufen.
 
<br>
 
<br>
  
 
== Siehe auch ==
 
== Siehe auch ==
[[glArrayElement]], [[glEnableClientState]], [[glDisableClientState]], [[glBegin|glBegin / glEnd]], [[glColorPointer]], [[glEdgeFlagPointer]], [[glGetPointerv]], [[glGetString]], [[glIndexPointer]], [[glNormalPointer]], [[glTexCoordPointer]], [[glVertexPointer]]
+
[[glArrayElement]], [[glEnableClientState]], [[glDisableClientState]], [[glBegin|glBegin / glEnd]], [[glColorPointer]], [[glDrawElements]], [[glDrawRangeElements]], [[glEdgeFlagPointer]], [[glFogCoordPointer]], [[glGetPointerv]], [[glGetString]], [[glIndexPointer]], [[glInterleavedArrays]], [[glMultiDrawArrays]], [[glMultiDrawElements]], [[glNormalPointer]], [[glSecondaryColorPointer]], [[glTexCoordPointer]], [[glVertexPointer]]
  
 
[[Kategorie:GL|DrawArrays]]
 
[[Kategorie:GL|DrawArrays]]

Version vom 13. April 2006, 19:42 Uhr

glDrawArrays

glDrawArrays - Erlaubt es mehrere Primitive auf einmal zu zeichnen.


Delphi-Spezifikation

procedure glDrawArrays(mode: TGLenum; first: TGLint; count: TGLsizei);


Parameter

Parameter Beschreibung
mode Bestimmt, welche Primitiven anhand der Vertexe gezeichnet werden sollen.
Es können die gleichen Werte wie bei glBegin übergeben werden:
GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES, GL_QUAD_STRIP, GL_QUADS, und GL_POLYGON.
first Definiert den Startindex der aktivierten Arrays.
count Definiert die Anzahl der Indizes, die gerendert werden sollen.


Beschreibung

glDrawArrays definiert mehrere geometrische Primitiven mit sehr wenig Unterfunktionsaufrufen. Anstatt eine OpenGL-Funktion aufzurufen, um jedes einzelne Vertex, Kantenflag, jede Farbe, Zweitfarbe, Normale, Textur- und Nebelkoordinate zu übergeben, kann man getrennte Vertex-, Normalen- und Farb-Arrays vordefinieren und diese benutzen, um eine Folge an Primitiven mit einem einzigen Aufruf von glDrawArrays zu konstruieren.

Wenn glDrawArrays aufgerufen wird, benutzt die Funktion count aufeinanderfolgende Elemente von jedem aktiviertem Array um eine Folge an geometrischen Primitiven zu konstruieren, beginnend mit Element first. mode definiert, welche Art von Primitiven konstruiert wird und wie die Arrayelemente diese Primitiven konstruieren. Falls GL_VERTEX_ARRAY nicht aktiviert ist, werden keine geometrischen Primitiven erzeugt.

Vertex-Attribute, die von glDrawArrays verändert werden, haben einen undefinierten Wert, nachdem der Aufruf von glDrawArrays beendet ist. Ist z.B. GL_COLOR_ARRAY aktiviert, ist der Wert der aktuellen Farbe undefiniert, nachdem glDrawArrays ausgeführt wird. Attribute, die nicht verändert werden, bleiben wohldefiniert.


Der Effekt von glDrawArrays ist derselbe wie :

glBegin(mode);
    FOR i := 0 TO count - 1 DO BEGIN
        glArrayElement(first + i);
    END;
glEnd();


Hinweise

glDrawArrays ist nur ab GL Version 1.1 oder höher verfügbar.

Der Befehl glDrawArrays kann in Displaylisten verwendet werden. Dadurch werden alle Daten aus den Arrays in die Liste übernommen.

Fehlermeldungen

GL_INVALID_VALUE
count hatte einen negativen Wert.
GL_INVALID_ENUM
mode hatte einen ungültigen Wert.
GL_INVALID_OPERATION
glDrawArrays wurde zwischen glBegin und dem dazugehörigen glEnd aufgerufen.


Siehe auch

glArrayElement, glEnableClientState, glDisableClientState, glBegin / glEnd, glColorPointer, glDrawElements, glDrawRangeElements, glEdgeFlagPointer, glFogCoordPointer, glGetPointerv, glGetString, glIndexPointer, glInterleavedArrays, glMultiDrawArrays, glMultiDrawElements, glNormalPointer, glSecondaryColorPointer, glTexCoordPointer, glVertexPointer