glMultiDrawArrays
Inhaltsverzeichnis
glMultiDrawArrays
glMultiDrawArrays - Erlaubt es mehrere Primitive auf einmal zu zeichnen.
Delphi-Spezifikation
procedure glMultiDrawArrays(mode: TGLenum; first: PGLint; count: PGLsizei; primcount: 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 | Zeiger auf mehrere Startindexwerte der aktivierten Arrays. |
count | Zeiger auf Array, bei dem jedes Element die Anzahl von Indizes angibt, die gerendert werden sollen. |
primcount | Anzahl der Elemente von first bzw. count. |
Beschreibung
glMultiDrawArrays 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 glMultiDrawArrays zu konstruieren.
Wenn glMultiDrawArrays ausgeführt wird, verhält sich die Funktion so, als würde sie primcount mal die Funktion glDrawArrays mit mode, count[i] und first[i] als Parameter aufrufen (Wobei i von 0 bis primcount - 1 läuft). D.h. die Funktion benutzt count[i] aufeinanderfolgende Elemente von jedem aktiviertem Array um eine Folge an geometrischen Primitiven zu konstruieren, beginnend mit Element first[i]. 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 glMultiDrawArrays verändert werden, haben einen undefinierten Wert, nachdem der Aufruf von glMultiDrawArrays beendet ist. Ist z.B. GL_COLOR_ARRAY aktiviert, ist der Wert der aktuellen Farbe undefiniert, nachdem glMultiDrawArrays ausgeführt wird. Attribute, die nicht verändert werden, bleiben wohldefiniert.
Der Effekt von glMultiDrawArrays ist derselbe wie
FOR i := 0 TO primcount - 1 DO BEGIN IF (count[i] > 0) THEN glDrawArrays(mode, first[i], count[i]); END;
Hinweise
'glMultiDrawArrays ist nur ab GL Version 1.4 oder höher verfügbar.
Der Befehl glMultiDrawArrays kann in Displaylisten verwendet werden. Dadurch werden alle Daten aus den Arrays in die Liste übernommen.
Fehlermeldungen
- GL_INVALID_VALUE
- primcount hatte einen negativen Wert.
- GL_INVALID_VALUE
- count[i] hatte einen negativen Wert.
- GL_INVALID_ENUM
- mode hatte einen ungültigen Wert.
- GL_INVALID_OPERATION
- glMultiDrawArrays wurde zwischen glBegin und dem dazugehörigen glEnd aufgerufen.
Siehe auch
glArrayElement, glEnableClientState, glDisableClientState, glBegin / glEnd, glColorPointer, glDrawArrays, glDrawElements, glDrawRangeElements, glEdgeFlagPointer, glFogCoordPointer, glGetPointerv, glGetString, glIndexPointer, glInterleavedArrays, glMultiDrawElements, glNormalPointer, glSecondaryColorPointer, glTexCoordPointer, glVertexPointer