glMultiDrawArrays

Aus DGL Wiki
Wechseln zu: Navigation, Suche

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