glDrawRangeElements
Inhaltsverzeichnis
glDrawRangeElements
Name
glDrawRangeElements - Rendert Primitiven aus einem Daten-Array mithilfe eines Index-Arrays.
Delphi-Spezifikation
procedure glDrawRangeElements(mode : glEnum; start: TGLuint; _end: TGLuint; count : glSizei; _type : glEnum; const indices : PGLvoid);
Parameter
mode | Gibt an, welcher Primitiven-Typ 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. |
---|---|
start | Startwert im Index-Array. |
_end | Endwert im Index-Array. |
count | Anzahl der zu rendernden Elemente. |
type | Gibt den Typ der Werte in indices an. Muss entweder GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT oder GL_UNSIGNED_INT sein. |
indices | Zeiger, hinter dem die Indizes hinterlegt sind. |
Beschreibung
glDrawRangeElements verhält sich genauso wie der Befehl glDrawElements, mit dem Unterschied, dass man die Werte des Index-Arrays mit den zusätzlichen Parametern start und _end einschränken kann. Es werden nur dann Primitiven gerendert, falls sich die Indizes ihrer Daten zwischen dem angegebenem Start- und Endwert (einschliesslich dieser) befinden.
Hinweise
glDrawRangeElements ist erst ab GL Version 1.2 oder höher nutzbar.
Ersetzt die Extension GL_EXT_draw_range_elements.
Nicht alle Werte zwischen start und _end müssen vom Index-Array referenziert werden. Allerdings kann eine nicht optimale Indexmenge zur Reduzierung der Performance führen, da nutzlose Vertices an die Grafikkarte gesendet werden.
glDrawRangeElements 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.
Es sollte darauf geachtet werden, dass der Wert von count nicht grösser als der von der OpenGL-Implementierung maximal zulässige Wert für Vertex-Arrays ist (abfragbar mit glGetIntegerv(GL_MAX_ELEMENTS_VERTICES)), da es ansonsten zu Performance-Einbußen kommen kann.
Ebenso sollte _end - start + 1 nicht grösser sein als der Wert, den man mit glGetIntegerv(GL_MAX_ELEMENTS_INDICES)) abfragen kann.
Fehlermeldungen
GL_INVALID_ENUM wird generiert, wenn mode keinen gültigen Wert enthält.
GL_INVALID_VALUE wird generiert, wenn count negativ ist.
GL_INVALID_OPERATION wird generiert, wenn glDrawRangeElements in einem glBegin-glEnd Block aufgerufen wird.
GL_INVALID_VALUE wird generiert, wenn _end < begin ist.
Abhängig von der OpenGL-Implementierung kann ein Fehler generiert werden, wenn die Werte des Index-Arrays außerhalb des Bereichs [begin, _end] liegen.
Siehe auch
glArrayElement, glColorPointer, glDrawArrays, glDrawElements, glEdgeFlagPointer, glGetPointerv, glIndexPointer, glInterleavedArrays, glMultiDrawArrays, glMultiDrawElements, glNormalPointer, glTexCoordPointer, glVertexPointer