glVertexPointer

Aus DGL Wiki
Version vom 19. Mai 2010, 10:46 Uhr von Lord horazont (Diskussion | Beiträge) (Hintergrundwissen: VBO ohne glInterleavedArrays hinzugefügt)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

glVertexPointer

Name

glVertexPointer - Beschreibt eine Reihe von Vertices.


Delphi-Spezifikation

procedure glVertexPointer(size : TGLint; _type : TGLenum; stride : TGLsizei; const _pointer : PGLvoid);


Parameter

size Gibt die Anzahl der Koordinaten pro Vertex an, muss 2,3 oder 4(Vorgabe) sein.
_type Gibt an von welchem Datentyp die Koordinaten sind. Gültig sind GL_SHORT, GL_INT, GL_FLOAT (Vorgabe), und GL_DOUBLE.
stride Byteoffset zwischen den aufeinanderfolgenden Vertices. stride = 0 (Vorgabe) bedeutet das die Vertices direkt hintereinander im Speicher liegen.
_pointer Zeiger auf das erste Vertex der Reihe. (ODER: Byteoffset zwischen Startadresse des VBOs und des ersten Vertex, wenn ein VBO gebunden ist)



Beschreibung

glVertexPointer beschreibt Lage und das Datenformat einer Reihe (Array) von Vertex-Koordinaten die später zum Rendern benutzt werden sollen. size gibt an wie viele Koordinaten dabei ein Vertex besitzt, während type die GL darüber informiert von welchem Datentyp diese sind. stride gibt zusätzlich noch an wie groß der "Leerraum" zwischen zwei aufeinanderfolgenden Vertices ist (z.B. wenn man eine Vertexstruktur hat in der nicht nur die Koordinaten gespeichert sind). Wenn die Vertex-Reihe mit diesem Befehl beschrieben wird, werden alle übergebenen Parameter auf der Client-Seite gespeichert.

Um Vertex-Reihen zu aktivieren bzw. zu deaktivieren, ruft man glEnableClientState bzw. glDisableClientState mit dem Token GL_VERTEX_ARRAY auf. Wurden diese aktiviert, so können diese mit glDrawArrays, glDrawElements oder glArrayElement gerendert werden.

glDrawArrays nutzt man dann um eine Sequenz von Primitiven (gleichen Typs) aus den übergebenen Vertex-Daten und Vertex-Attributen zu rendern, glArrayElement um Primitiven per Indizes zu rendern und glDrawElements um per Index indiziert eine Sequenz von Primitiven zu konstruieren.



Hinweise

glVertexPointer ist ab OpenGL 1.1 verfügbar, typischerweise als Client-Status implementiert (d.h. das diese nicht per glPush-/glPopAttrib gesichert werden können, sondern nur via glPush-/glPopClientAttrib), und Vertex-Reihen sind per Vorgabe deaktiviert (also nicht per glArrayElement, glDrawElements oder glDrawArrays aufrufbar).

Ein Aufruf von glVertexPointer zwischen einem glBegin und dem zugehörigen glEnd ist nicht erlaubt, allerdings muss (je nach Implementation) dann nicht unbedingt eine Fehlermeldung generiert werden.



Fehlermeldungen

GL_INVALID_VALUE wird generiert wenn size weder 2, 3 noch 4 ist.

GL_INVALID_ENUM wenn _type keine gültige Konstante beinhaltet.

GL_INVALID_VALUE wenn stride negativ ist.


Zugehörige Wertrückgaben

glIsEnabled mit dem Token GL_VERTEX_ARRAY
glGet mit dem Token GL_VERTEX_ARRAY_SIZE
glGet mit dem Token GL_VERTEX_ARRAY_TYPE
glGet mit dem Token GL_VERTEX_ARRAY_STRIDE
glGetPointerv mit dem Token GL_VERTEX_ARRAY_POINTER


Siehe auch

Hintergrundwissen: VBO ohne glInterleavedArrays

glArrayElement, glColorPointer, glDrawArrays, glDrawElements, glEdgeFlagPointer, glEnable, glGetPointerv, glIndexPointer, glInterleavedArrays, glNormalPointer, glPopClientAttrib, glPushClientAttrib, glTexCoordPointer