glMultiDrawElements: Unterschied zwischen den Versionen
(neu erstellt) |
DGLBot (Diskussion | Beiträge) K (Bot: konvertiere/korrigiere <BR>) |
||
Zeile 1: | Zeile 1: | ||
= glMultiDrawElements = | = glMultiDrawElements = | ||
− | + | ||
+ | |||
== Name == | == Name == | ||
'''glMultiDrawElements''' - Rendert Primitiven aus mehreren Datenarrays heraus. | '''glMultiDrawElements''' - Rendert Primitiven aus mehreren Datenarrays heraus. | ||
− | + | ||
+ | |||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
procedure '''glMultiDrawElements'''(''mode'': TGLenum; '''const''' ''count'': PGLsizei; | procedure '''glMultiDrawElements'''(''mode'': TGLenum; '''const''' ''count'': PGLsizei; | ||
Zeile 11: | Zeile 13: | ||
''primcount'': TGLsizei); | ''primcount'': TGLsizei); | ||
− | + | ||
+ | |||
== Parameter == | == Parameter == | ||
Zeile 31: | Zeile 34: | ||
|} | |} | ||
− | + | ||
+ | |||
== Beschreibung == | == Beschreibung == | ||
'''glMultiDrawElements''' beschreibt mehrere geometrische Primitiven mit nur sehr wenigen Unteraufrufen. Anstatt also für einzelne [[Eckpunkt]]e, [[Normalen]], [[Texturkoordinaten]], Kantenflags oder Farbwerte einen eigenen GL-Befehl aufzurufen kann man hier für Eckpunkte, Normalen, usw. eigene Arrays angeben und nutzen um mit '''glMultiDrawElements''' eine Sequenz von Primitiven mit nur einem Befehl zu rendern. | '''glMultiDrawElements''' beschreibt mehrere geometrische Primitiven mit nur sehr wenigen Unteraufrufen. Anstatt also für einzelne [[Eckpunkt]]e, [[Normalen]], [[Texturkoordinaten]], Kantenflags oder Farbwerte einen eigenen GL-Befehl aufzurufen kann man hier für Eckpunkte, Normalen, usw. eigene Arrays angeben und nutzen um mit '''glMultiDrawElements''' eine Sequenz von Primitiven mit nur einem Befehl zu rendern. | ||
Zeile 56: | Zeile 60: | ||
− | + | ||
+ | |||
== Hinweise == | == Hinweise == | ||
'''glMultiDrawElements''' ist erst ab GL Version 1.4 oder höher nutzbar. | '''glMultiDrawElements''' ist erst ab GL Version 1.4 oder höher nutzbar. | ||
Zeile 62: | Zeile 67: | ||
'''glMultiDrawElements''' wird in [[Displaylisten]] eingebunden, wenn die Funktion also in eine Displayliste kompiliert wird, werden die benötigten Arrayzeiger (welche das sind wird durch die Arrayzeiger und aktivierten States beschrieben) in die Displayliste kompiliert. Dies geschieht da die Arrayzeiger und aktivierten States clientseitige States sind, und die Displayliste daher nur bei ihrer Erstellung beeinflussen, nicht jedoch bei ihrer Ausführung. | '''glMultiDrawElements''' wird in [[Displaylisten]] eingebunden, wenn die Funktion also in eine Displayliste kompiliert wird, werden die benötigten Arrayzeiger (welche das sind wird durch die Arrayzeiger und aktivierten States beschrieben) in die Displayliste kompiliert. Dies geschieht da die Arrayzeiger und aktivierten States clientseitige States sind, und die Displayliste daher nur bei ihrer Erstellung beeinflussen, nicht jedoch bei ihrer Ausführung. | ||
− | + | ||
+ | |||
== Fehlermeldungen == | == Fehlermeldungen == | ||
;'''GL_INVALID_ENUM''': ''mode'' enthält keinen gültigen Wert. | ;'''GL_INVALID_ENUM''': ''mode'' enthält keinen gültigen Wert. | ||
Zeile 70: | Zeile 76: | ||
;'''GL_INVALID_OPERATION''': '''glMultiDrawElements''' wurde in einem [[glBegin]]-[[glEnd]] Block aufgerufen. | ;'''GL_INVALID_OPERATION''': '''glMultiDrawElements''' wurde in einem [[glBegin]]-[[glEnd]] Block aufgerufen. | ||
− | + | ||
+ | |||
== Siehe auch == | == Siehe auch == | ||
[[glArrayElement]], [[glEnableClientState]], [[glDisableClientState]], [[glBegin|glBegin / glEnd]], [[glColorPointer]], [[glDrawArrays]], [[glDrawElements]], [[glDrawRangeElements]], [[glEdgeFlagPointer]], [[glFogCoordPointer]], [[glGetPointerv]], [[glGetString]], [[glIndexPointer]], [[glInterleavedArrays]], [[glMultiDrawArrays]], [[glNormalPointer]], [[glSecondaryColorPointer]], [[glTexCoordPointer]], [[glVertexPointer]] | [[glArrayElement]], [[glEnableClientState]], [[glDisableClientState]], [[glBegin|glBegin / glEnd]], [[glColorPointer]], [[glDrawArrays]], [[glDrawElements]], [[glDrawRangeElements]], [[glEdgeFlagPointer]], [[glFogCoordPointer]], [[glGetPointerv]], [[glGetString]], [[glIndexPointer]], [[glInterleavedArrays]], [[glMultiDrawArrays]], [[glNormalPointer]], [[glSecondaryColorPointer]], [[glTexCoordPointer]], [[glVertexPointer]] | ||
[[Kategorie:GL|MultiDrawElements]] | [[Kategorie:GL|MultiDrawElements]] |
Aktuelle Version vom 22. April 2006, 19:22 Uhr
Inhaltsverzeichnis
glMultiDrawElements
Name
glMultiDrawElements - Rendert Primitiven aus mehreren Datenarrays heraus.
Delphi-Spezifikation
procedure glMultiDrawElements(mode: TGLenum; const count: PGLsizei; _type: TGLenum; const indices: PGLvoid; primcount: TGLsizei);
Parameter
mode | Gibt an welcher Primitiven-Type gerendert werden soll. Hier sind die symbolische Konstanten 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 erlaubt. |
---|---|
count | Zeiger auf Array, das die Anzahl der zu rendernden Elemente enthält. |
_type | Gibt den Typ der Werte in indices an. Muss entweder GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT oder GL_UNSIGNED_INT sein. |
indices | Zeiger auf Array, das Zeiger enthält, hinter denen die Indizes hinterlegt sind. |
primcount | Anzahl der Elemente von indices bzw. count. |
Beschreibung
glMultiDrawElements beschreibt mehrere geometrische Primitiven mit nur sehr wenigen Unteraufrufen. Anstatt also für einzelne Eckpunkte, Normalen, Texturkoordinaten, Kantenflags oder Farbwerte einen eigenen GL-Befehl aufzurufen kann man hier für Eckpunkte, Normalen, usw. eigene Arrays angeben und nutzen um mit glMultiDrawElements eine Sequenz von Primitiven mit nur einem Befehl zu rendern.
Wenn glMultiDrawElements ausgeführt wird, verhält sich die Funktion so, als würde sie primcount mal die Funktion glDrawElements mit mode, _type, count[i] und indices[i] als Parameter aufrufen (Wobei i von 0 bis primcount - 1 läuft). D.h. wenn glMultiDrawElements aufgerufen wird, nimmt es count[i] Elemente aus den aktivierten Arrays, deren Positionen in indices[i] gespeichert sind, um eine Abfolge geometrischer Primitiven zu erstellen. mode gibt dabei an welche Art von Primitive konstruiert werden soll und wie diese Arrayelemente Primitiven darstellen. Wenn mehr als ein Array aktiviert wurde, werden diese auch genutzt (Vertexarray, Normalenarray, Farbarray, Texturkoordinatenarray, etc.) Wenn GL_VERTEX_ARRAY nicht aktiviert ist, werden allerdings keine geometrischen Primitiven erstellt.
Vertexattribute, die durch glMultiDrawElements verändert werden, haben nach dem Rücksprung von glMultiDrawElements undefinierte Werte. Wenn z.B. GL_COLOR_ARRAY aktiviert wurde, ist der aktuell gesetze Farbwert nach der Ausführung von glMultiDrawElements undefiniert. Unveränderte Attribute behalten allerdings ihren angegebenen Status.
Der Effekt von glMultiDrawElements ist derselbe wie :
FOR i := 0 TO primcount - 1 DO BEGIN IF (count[i] > 0) THEN glDrawElements(mode, count[i], _type, indices[i]); END;
Beispiel
oneIndices : ARRAY[0..6] OF GLubyte = (0, 1, 2, 3, 4, 5, 6); twoIndices : ARRAY[0..5] OF GLubyte = (7, 1, 8, 9, 10, 11); count : ARRAY[0..2] OF GLsizei = (7, 6); indices : ARRAY[0..2] OF ^GLvoid = (oneIndices, twoIndices); ... glMultiDrawElements(GL_LINE_STRIP, count, GL_UNSIGNED_BYTE, indices, 2);
Hinweise
glMultiDrawElements ist erst ab GL Version 1.4 oder höher nutzbar.
glMultiDrawElements wird in Displaylisten eingebunden, wenn die Funktion also in eine Displayliste kompiliert wird, werden die benötigten Arrayzeiger (welche das sind wird durch die Arrayzeiger und aktivierten States beschrieben) in die Displayliste kompiliert. Dies geschieht da die Arrayzeiger und aktivierten States clientseitige States sind, und die Displayliste daher nur bei ihrer Erstellung beeinflussen, nicht jedoch bei ihrer Ausführung.
Fehlermeldungen
- GL_INVALID_ENUM
- mode enthält keinen gültigen Wert.
- GL_INVALID_VALUE
- count ist negativ.
Siehe auch
glArrayElement, glEnableClientState, glDisableClientState, glBegin / glEnd, glColorPointer, glDrawArrays, glDrawElements, glDrawRangeElements, glEdgeFlagPointer, glFogCoordPointer, glGetPointerv, glGetString, glIndexPointer, glInterleavedArrays, glMultiDrawArrays, glNormalPointer, glSecondaryColorPointer, glTexCoordPointer, glVertexPointer