glBindBuffer: Unterschied zwischen den Versionen
Flo (Diskussion | Beiträge) K |
K (→Siehe auch) |
||
(21 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
= glBindBuffer = | = glBindBuffer = | ||
== Name == | == Name == | ||
− | '''glBindBuffer''' - | + | '''glBindBuffer''' - Erzeugt ein neues oder bindet ein existierendes [[VBO|Puffer-Objekt]]. |
Zeile 14: | Zeile 8: | ||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
− | procedure '''glBindBuffer'''(''target'' : | + | procedure '''glBindBuffer'''(''target'' : TGLenum; ''buffer'' : TGLuint) |
− | |||
Zeile 23: | Zeile 16: | ||
{| border="1" rules="all" | {| border="1" rules="all" | ||
! ''target'' | ! ''target'' | ||
− | | | + | | Das Ziel, an das der Puffer gebunden wird. Mögliche Werte: '''GL_ARRAY_BUFFER''' oder '''GL_ELEMENT_ARRAY_BUFFER'''. |
|- | |- | ||
! ''buffer'' | ! ''buffer'' | ||
− | | | + | | Name des zu bindenden Puffer-Objektes oder 0. |
|} | |} | ||
+ | == Beschreibung == | ||
+ | |||
+ | '''glBindBuffer''' ermöglicht es, benannte Puffer-Objekte zu erstellen und/oder zu benutzen. | ||
− | + | ''target'' gibt an, welche Art von Daten das Puffer-Objekt speichern soll. | |
+ | Es gibt zwei verschiedene Möglichkeiten für ''target'' : | ||
− | + | '''GL_ARRAY_BUFFER''' | |
− | + | : Das Puffer-Objekt wird zur Speicherung von [[Vertexarray]]-Daten benutzt. | |
− | |||
− | + | '''GL_ELEMENT_ARRAY_BUFFER''' | |
+ | : Das Puffer-Objekt dient zur Speicherung von Indexwerten für [[Vertexarray]]s. | ||
− | + | Wird der Befehl zum ersten Mal mit einem unbenutzten Puffer-Objekt-Namen als Parameter für ''buffer'' (welcher mit [[glGenBuffers]] erzeugt werden kann) aufgerufen, wird ein neues Puffer-Objekt für das Ziel ''target'' angelegt und an den Namen ''buffer'' gebunden. | |
+ | Das erzeugte Puffer-Objekt ist ein neuer Zustandsvektor, der mit einem 0-elementigen Speicherbereich initialisiert wird und folgende Zustände enthält : | ||
− | {| | + | {| {{Prettytable_B1}} |
! Name | ! Name | ||
! Type | ! Type | ||
− | ! | + | ! Wert nach Puffer Erstellung |
! erlaubte Werte | ! erlaubte Werte | ||
|- | |- | ||
− | | | + | | GL_BUFFER_SIZE |
| integer | | integer | ||
| 0 | | 0 | ||
| jede positive Zahl | | jede positive Zahl | ||
|- | |- | ||
− | | | + | | GL_BUFFER_USAGE |
| enum | | enum | ||
− | | | + | | GL_STATIC_DRAW |
− | | | + | | GL_STREAM_DRAW, GL_STREAM_READ, GL_STREAM_COPY, GL_STATIC_DRAW, GL_STATIC_READ, GL_STATIC_COPY, GL_DYNAMIC_DRAW, GL_DYNAMIC_READ, GL_DYNAMIC_COPY |
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | | GL_BUFFER_ACCESS |
| enum | | enum | ||
− | | | + | | GL_READ_WRITE |
− | | | + | | GL_READ_ONLY, GL_WRITE_ONLY, GL_READ_WRITE |
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | | GL_BUFFER_MAPPED |
| boolean | | boolean | ||
| FALSE | | FALSE | ||
| TRUE, FALSE | | TRUE, FALSE | ||
|- | |- | ||
− | | | + | | GL_BUFFER_MAP_POINTER |
| void* | | void* | ||
| NULL | | NULL | ||
Zeile 83: | Zeile 71: | ||
|} | |} | ||
− | |||
− | + | Wird ein bereits existierendes Puffer-Objekt mit '''glBindBuffer''' erfolgreich gebunden, ändert sich der Zustand des neu gebunden Puffer-Objektes nicht und es werden alle vorher existierenden Bindungen bezüglich des Ziels aufgehoben. | |
− | + | GL-Operationen auf das gebundenes Ziel ''target'' beeinflussen das an dieses Ziel gebundene Puffer-Objekt. Abfragen bezüglich des gebundenen Ziels liefern Informationen über den Status des jeweiligen gebundenen Puffer-Objektes. | |
− | |||
− | == | + | == Hinweise == |
− | ''' | + | '''glBindBuffer''' ist erst ab OpenGL Version 1.5 verfügbar! |
− | |||
+ | Im Anfangszustand ist der reservierte Name 0 an '''GL_ARRAY_BUFFER''' und '''GL_ELEMENT_ARRAY_BUFFER''' gebunden. Da für den Namen 0 kein entsprechendes Puffer-Objekt existiert, werden alle Anfragen oder Manipulationen bezüglich der beiden Ziele '''GL_ARRAY_BUFFER''' und '''GL_ELEMENT_ARRAY_BUFFER''' OpenGL-Fehler verursachen, während 0 gebunden ist. | ||
+ | Puffer-Objekte, die durch Bindung eines unbenutzten Namens an '''GL_ARRAY_BUFFER''' und '''GL_ELEMENT_ARRAY_BUFFER''' erzeugt werden sind formal äquivalent, jedoch kann GL abhängig von der Anfangsbindung verschiedene Auswahlmöglichkeiten über die Implementation der Speicherung treffen. In einigen Fällen wird die Performance optimiert, indem Indexwerte und Arraydaten in getrennten Puffer-Objekten gespeichert und indem diese Pufferobjekte mit entsprechenden Bindungspunkten erzeugt werden. | ||
− | + | GL-Kommandos, die in einer [[Displayliste]] ausgeführt werden, dürfen nicht auf [[VBO|Puffer-Objekte]] zugreifen. | |
− | [[ | ||
− | |||
+ | == Fehlermeldungen == | ||
+ | '''GL_INVALID_ENUM''' wird generiert wenn ''target'' einen ungültigen Wert hat. | ||
== Siehe auch == | == Siehe auch == | ||
− | [[glDeleteBuffers]], [[glGenBuffers]], [[ | + | [[glBufferData]], [[glBufferSubData]], [[glDeleteBuffers]], [[glGenBuffers]], [[glGetBufferParameter]], [[glGetBufferPointerv]], [[glGetBufferSubData]], [[glIsBuffer]], [[glMapBuffer]], [[glUnmapBuffer]] |
− | |||
[[Kategorie:GL|BindBuffer]] | [[Kategorie:GL|BindBuffer]] | ||
+ | [[Kategorie:GL1.5|BindBuffer]] | ||
+ | [[Kategorie:GL3|BindBuffer]] |
Aktuelle Version vom 21. Februar 2014, 17:47 Uhr
Inhaltsverzeichnis
glBindBuffer
Name
glBindBuffer - Erzeugt ein neues oder bindet ein existierendes Puffer-Objekt.
Delphi-Spezifikation
procedure glBindBuffer(target : TGLenum; buffer : TGLuint)
Parameter
target | Das Ziel, an das der Puffer gebunden wird. Mögliche Werte: GL_ARRAY_BUFFER oder GL_ELEMENT_ARRAY_BUFFER. |
---|---|
buffer | Name des zu bindenden Puffer-Objektes oder 0. |
Beschreibung
glBindBuffer ermöglicht es, benannte Puffer-Objekte zu erstellen und/oder zu benutzen.
target gibt an, welche Art von Daten das Puffer-Objekt speichern soll. Es gibt zwei verschiedene Möglichkeiten für target :
GL_ARRAY_BUFFER
- Das Puffer-Objekt wird zur Speicherung von Vertexarray-Daten benutzt.
GL_ELEMENT_ARRAY_BUFFER
- Das Puffer-Objekt dient zur Speicherung von Indexwerten für Vertexarrays.
Wird der Befehl zum ersten Mal mit einem unbenutzten Puffer-Objekt-Namen als Parameter für buffer (welcher mit glGenBuffers erzeugt werden kann) aufgerufen, wird ein neues Puffer-Objekt für das Ziel target angelegt und an den Namen buffer gebunden. Das erzeugte Puffer-Objekt ist ein neuer Zustandsvektor, der mit einem 0-elementigen Speicherbereich initialisiert wird und folgende Zustände enthält :
Name | Type | Wert nach Puffer Erstellung | erlaubte Werte |
---|---|---|---|
GL_BUFFER_SIZE | integer | 0 | jede positive Zahl |
GL_BUFFER_USAGE | enum | GL_STATIC_DRAW | GL_STREAM_DRAW, GL_STREAM_READ, GL_STREAM_COPY, GL_STATIC_DRAW, GL_STATIC_READ, GL_STATIC_COPY, GL_DYNAMIC_DRAW, GL_DYNAMIC_READ, GL_DYNAMIC_COPY |
GL_BUFFER_ACCESS | enum | GL_READ_WRITE | GL_READ_ONLY, GL_WRITE_ONLY, GL_READ_WRITE |
GL_BUFFER_MAPPED | boolean | FALSE | TRUE, FALSE |
GL_BUFFER_MAP_POINTER | void* | NULL | address |
Wird ein bereits existierendes Puffer-Objekt mit glBindBuffer erfolgreich gebunden, ändert sich der Zustand des neu gebunden Puffer-Objektes nicht und es werden alle vorher existierenden Bindungen bezüglich des Ziels aufgehoben.
GL-Operationen auf das gebundenes Ziel target beeinflussen das an dieses Ziel gebundene Puffer-Objekt. Abfragen bezüglich des gebundenen Ziels liefern Informationen über den Status des jeweiligen gebundenen Puffer-Objektes.
Hinweise
glBindBuffer ist erst ab OpenGL Version 1.5 verfügbar!
Im Anfangszustand ist der reservierte Name 0 an GL_ARRAY_BUFFER und GL_ELEMENT_ARRAY_BUFFER gebunden. Da für den Namen 0 kein entsprechendes Puffer-Objekt existiert, werden alle Anfragen oder Manipulationen bezüglich der beiden Ziele GL_ARRAY_BUFFER und GL_ELEMENT_ARRAY_BUFFER OpenGL-Fehler verursachen, während 0 gebunden ist.
Puffer-Objekte, die durch Bindung eines unbenutzten Namens an GL_ARRAY_BUFFER und GL_ELEMENT_ARRAY_BUFFER erzeugt werden sind formal äquivalent, jedoch kann GL abhängig von der Anfangsbindung verschiedene Auswahlmöglichkeiten über die Implementation der Speicherung treffen. In einigen Fällen wird die Performance optimiert, indem Indexwerte und Arraydaten in getrennten Puffer-Objekten gespeichert und indem diese Pufferobjekte mit entsprechenden Bindungspunkten erzeugt werden.
GL-Kommandos, die in einer Displayliste ausgeführt werden, dürfen nicht auf Puffer-Objekte zugreifen.
Fehlermeldungen
GL_INVALID_ENUM wird generiert wenn target einen ungültigen Wert hat.
Siehe auch
glBufferData, glBufferSubData, glDeleteBuffers, glGenBuffers, glGetBufferParameter, glGetBufferPointerv, glGetBufferSubData, glIsBuffer, glMapBuffer, glUnmapBuffer