glBindBuffer: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (TODO)
K (Siehe auch)
 
(4 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Unvollständig}}
 
 
 
 
 
= glBindBuffer =
 
= glBindBuffer =
  
 
== Name ==
 
== Name ==
'''glBindBuffer''' - Bindet einen benannten Puffer an ein Ziel.
+
'''glBindBuffer''' - Erzeugt ein neues oder bindet ein existierendes [[VBO|Puffer-Objekt]].
  
  
Zeile 20: 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
+
| Das Ziel, an das der Puffer gebunden wird. Mögliche Werte: '''GL_ARRAY_BUFFER''' oder '''GL_ELEMENT_ARRAY_BUFFER'''.
 
|-
 
|-
 
! ''buffer''  
 
! ''buffer''  
| Ein mit [[glGenBuffers]] angeforderter [[OpenGL Name]]n oder die Zahl 0, welche für die GL reserviert ist.  
+
| Name des zu bindenden Puffer-Objektes oder 0.  
 
|}
 
|}
 +
  
 
== Beschreibung ==  
 
== Beschreibung ==  
  
'''glBindBuffer''' ermöglicht es benannte Puffer zu erstellen und zu benutzen. Ein Aufruf von '''glBindBuffer''' mit GL_ARRAY_BUFFER oder GL_ELEMENT_ARRAY_BUFFER als ''target'' und einem gultigen OpenGL Namen für ''buffer'' bindet eben diesen Puffer an das mit ''target'' angegebene Ziel.
+
'''glBindBuffer''' ermöglicht es, benannte Puffer-Objekte zu erstellen und/oder zu benutzen.  
 
 
Wenn ein Puffer an ein Ziel gebunden wird, wird die bisherige Bindung eines anderen Puffers an das Ziel gebrochen/aufgehoben.
 
 
 
Ein neues Buffer Objekt wird erzeugt in dem man einen [[OpenGL Name]]n an GL_ARRAY_BUFFER bindet. Einen solchen Namen erhält man in dem man [[glGenBuffers]] aufruft.
 
  
Es ist möglich ein existierenden Puffer mit '''glBindBuffer''' zu binden. Falls dies erfolgreich verläuft wird keine Einstellung des Puffers geändert. (Auch hier werden alle vorher existierenden Bindungen bezüglich des Ziels aufgehoben.)
+
''target'' gibt an, welche Art von Daten das Puffer-Objekt speichern soll.
 +
Es gibt zwei verschiedene Möglichkeiten für ''target'' :
  
{|
+
'''GL_ARRAY_BUFFER'''
|+ doppelte Information. Muss noch überarbeitet werden.
+
: Das Puffer-Objekt wird zur Speicherung von [[Vertexarray]]-Daten benutzt.  
|
 
Operationen auf das gebunde Ziel, beeinflussen das Puffer Objekt solange es gebunden ist. Abfragen bezüglich des gebunden Ziels liefern Informationen über den Status des Puffer Objektes.
 
|-
 
|
 
Solange ein Pufferobjekt gebunden ist, beeinflussen alle GL Operationen auf diesem Objekt alle anderen Bindungen des Objekts.
 
|}
 
  
 +
'''GL_ELEMENT_ARRAY_BUFFER'''
 +
: Das Puffer-Objekt dient zur Speicherung von Indexwerten für [[Vertexarray]]s.
  
Vertex Daten Arrays werden im Speicher des Clients gespeichert. Manchmal ist es aus performance Gruenden erforderlich die Daten im Speicher des Servers zu speichern. GL Puffer Objekte erlauben es den Clienten mit diesem Speicher zu arbeiten. (d.h.: Speicher anzufordern, zu initialisieren und davon rendern)
+
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 :
Der Speicher des neuen Puffers ist mit 0 initialisiert. Jeder Puffer bietet noch eine Reihe von Einstellungen, welche folgender Tabelle zu entnehmen sind:
 
  
 
{| {{Prettytable_B1}}
 
{| {{Prettytable_B1}}
Zeile 68: Zeile 57:
 
| GL_BUFFER_ACCESS
 
| GL_BUFFER_ACCESS
 
| enum
 
| enum
|
+
| GL_READ_WRITE
* GL_READ_WRITE (laut OpenGL 1.5 und 2.0 Spezifikationen)
 
* GL_WRITE_ONLY (laut Aussage eines anderen Artikels)
 
 
| GL_READ_ONLY, GL_WRITE_ONLY, GL_READ_WRITE
 
| GL_READ_ONLY, GL_WRITE_ONLY, GL_READ_WRITE
 
|-
 
|-
Zeile 83: Zeile 70:
 
| address
 
| 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 ==
 
== Hinweise ==
Im Ausgangszustand ist der reservierte Name 0 an GL_ARRAY_BUFFER und GL_ELEMENT_ARRAY_BUFFER gebunden. Da niemals ein Pufferobjekt durch 0 bezeichnet werden kann, werden alle Anfragen oder Manipulationen bezüglich der beiden Ziele OpenGL Fehler verursachen solange 0 gebunden ist.
+
'''glBindBuffer''' ist erst ab OpenGL Version 1.5 verfügbar!
  
'''glBindBuffer''' ist erst in 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 ==
 
== Fehlermeldungen ==
'''GL_INVALID_ENUM''' wird generiert wenn ''target'' einen ungueltigen Wert hat.
+
'''GL_INVALID_ENUM''' wird generiert wenn ''target'' einen ungültigen Wert hat.
  
  
 
== Siehe auch ==
 
== Siehe auch ==
[[glDeleteBuffers]], [[glGenBuffers]], [[glBufferData]], [[glBufferSubData]], [[glMapBuffer]], [[glUnmapBuffer]]
+
[[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

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