glVertexPointer: Unterschied zwischen den Versionen
DGLBot (Diskussion | Beiträge) K (Bot: konvertiere/korrigiere <BR>) |
K (Hintergrundwissen: VBO ohne glInterleavedArrays hinzugefügt) |
||
(2 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 11: | Zeile 11: | ||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
− | procedure '''glVertexPointer'''(''size'' : TGLint; ''_type'' : TGLenum; ''stride'' : TGLsizei; const ''_pointer'' : PGLvoid); | + | procedure '''glVertexPointer'''(''size'' : TGLint; ''_type'' : TGLenum; ''stride'' : TGLsizei; const ''_pointer'' : PGLvoid); |
Zeile 17: | Zeile 17: | ||
== Parameter == | == Parameter == | ||
− | + | ||
− | + | {| border="1" rules="all" | |
− | + | ! ''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) | |
− | + | |} | |
− | + | ||
− | |||
− | |||
− | |||
Zeile 60: | Zeile 57: | ||
== Fehlermeldungen == | == Fehlermeldungen == | ||
− | GL_INVALID_VALUE wird generiert wenn ''size'' | + | GL_INVALID_VALUE wird generiert wenn ''size'' weder 2, 3 noch 4 ist.<br> |
GL_INVALID_ENUM wenn ''_type'' keine gültige Konstante beinhaltet.<br> | GL_INVALID_ENUM wenn ''_type'' keine gültige Konstante beinhaltet.<br> | ||
Zeile 79: | Zeile 76: | ||
== Siehe auch == | == Siehe auch == | ||
+ | |||
+ | Hintergrundwissen: [[VBO ohne glInterleavedArrays]] | ||
[[glArrayElement]], [[glColorPointer]], [[glDrawArrays]], [[glDrawElements]], [[glEdgeFlagPointer]], [[glEnable]], [[glGetPointerv]], [[glIndexPointer]], [[glInterleavedArrays]], [[glNormalPointer]], [[glPopClientAttrib]], [[glPushClientAttrib]], [[glTexCoordPointer]] | [[glArrayElement]], [[glColorPointer]], [[glDrawArrays]], [[glDrawElements]], [[glEdgeFlagPointer]], [[glEnable]], [[glGetPointerv]], [[glIndexPointer]], [[glInterleavedArrays]], [[glNormalPointer]], [[glPopClientAttrib]], [[glPushClientAttrib]], [[glTexCoordPointer]] | ||
[[Kategorie:GL|VertexPointer]] | [[Kategorie:GL|VertexPointer]] |
Aktuelle Version vom 19. Mai 2010, 10:46 Uhr
Inhaltsverzeichnis
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