glBufferData: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Neuer Artikel)
 
K (Unvollständig, gibt noch mehr usage-Möglichkeiten)
Zeile 1: Zeile 1:
 +
{{Unvollständig}}
 +
 
= glBufferData =
 
= glBufferData =
 
 
  
 
== Name ==
 
== Name ==

Version vom 11. Mai 2006, 22:17 Uhr

Hinweis: Dieser Artikel ist noch unvollständig.
(Mehr Informationen/weitere Artikel)

{{{1}}}

Incomplete.jpg

glBufferData

Name

glBufferData - erstellt und initialisiert den Datenspeicher eines Pufferobjekts.


Delphi-Spezifikation

procedure glBufferData(target: TGLenum; size: TGLsizei; const data: PGLvoid; usage: TGLenum); 

Parameter

target Bestimmt das Ziel des Pufferobjekts. Muss GL_ARRAY_BUFFER oder GL_ELEMENT_ARRAY_BUFFER sein.
size Definiert die Größe des Datenspeichers in basic machine units.
data Spezifiziert die Quelldaten im Arbeitsspeicher des Klienten.
usage Bestimmt das erwartete Benutzungsmuster für den Datenspeicher. Akzeptiert werden GL_STATIC_DRAW und GL_DYNAMIC_DRAW.


Beschreibung

glBufferData ermöglicht es Datenspeicher für Pufferobjekte (VBO) zu erstellen und zu initialisieren.

Wenn data nicht NULL/NIL ist, werden die Quelldaten in den Datenspeicher des Pufferobjekts kopiert. Wenn data NULL/NIL ist, ist der Inhalt des Datenspeichers undefiniert.


Für usage können folgende Werte benutzt werden:

GL_STATIC_DRAW

Wird benutzt, wenn der Inhalt des Datenspeichers einmal durch die Anwendung gesetzt wird, und mehrfach für GL Renderbefehle benutzt wird.

GL_DYNAMIC_DRAW

Wird benutzt, wenn der Inhalt des Datenspeichers wiederholt durch die Application geändert wird, und mehrfach für GL Renderbefehle benutzt wird.


glBufferData zerstört alle existierenden Datenspeicher und setzt die Werte der Zustandsvariablen des Pufferobjekts folgender maßen:

GL_BUFFER_SIZE initialisiert auf size. GL_BUFFER_USAGE initialisiert auf usage. GL_BUFFER_ACCESS initialisiert auf GL_WRITE_ONLY.


Klienten müssen ihre Datenelemente im Speicher konsistent und abhängig von den Anforderungen der Klientplattform ausrichten. Zu diesem Zweck exisitert eine weitere zusätzliche Anforderung, und zwar, dass der Versatz/Offset innerhalb des Puffers zwischen Daten die aus N basic machine units bestehen ein vielfaches von N sein muss.

Hinweise

usage dient nur als Performanzhinweis. Der angegebene Wert beschränkt nicht den tatsächlichen Einsatz des Datenspeichers.

Info DGL.png Es ist allerdings vorstellbar, dass die Grafikkartenhersteller anhand des Wertes ihre Grafikspeicheraufteilung optimieren. Man solle sich aus Performancegründen möglichst an das angegebene Verhalten halten.

glBufferData und glBufferSubData definieren zwei neue Typen die auf 64-Bit Rechnern funktionieren. Analog zu intptr t in C gibt es den neuen Typ GLintptrARB welcher anstatt von GLint benutzt werden soll, wenn absehbar ist, dass die Werte größer als 2 Miliarden werden. Des Weiteren wird der Typ GLsizeiptrARB eingeführt welcher anstatt von GLsizei benutzt werden soll, wenn absehbar ist, dass eine Anzahl größer als 2 Milliarden wird.

Beide Typen sind als vorzeichenbehaftete Ganzzahlen definiert welche groß genug sind um beliebige Zeiger zu enthalten. Daraus ergibt sich, dass sie auf Systemen mit 64-Bit Zeigern (oder mehr) eine große Menge Bits benutzen.


Fehlermeldungen

GL_INVALID_ENUM wird generiert wenn target kein zulässiger Wert übergeben wurde.

GL_INVALID_ENUM wird generiert wenn usage kein zulässiger Wert übergeben wurde.

GL_OUT_OF_MEMORY wird generiert wenn es der GL nicht möglich war einen Datenspeicher der geforderten Größe anzulegen.


Zugehörige Wertrückgaben

glGetBufferParameter mit Token GL_BUFFER_SIZE.

glGetBufferParameter mit Token GL_BUFFER_USAGE.

glGetBufferParameter mit Token GL_BUFFER_ACCESS.


Siehe auch

glBufferSubData, glBindBuffer, glDeleteBuffers, glGenBuffers