Benutzer:BerndD: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: Achtung: Dies ist nur eine Arbeitsvorlage für die Seiten die ich gerade erstelle. = ARB_vertex_buffer_object = Die Extension wurde in die OpenGL 1.5 Spezifikation aufg...)
 
Zeile 1: Zeile 1:
 
Achtung: Dies ist nur eine Arbeitsvorlage für die Seiten die ich gerade erstelle.
 
Achtung: Dies ist nur eine Arbeitsvorlage für die Seiten die ich gerade erstelle.
 
= ARB_vertex_buffer_object =
 
= ARB_vertex_buffer_object =
Die Extension wurde in die OpenGL 1.5 Spezifikation aufgenommen. Dieser Artikel berücksichtigt dies, indem hier die mit OpenGL 1.5 eingeführten Bezeichner verwendet werden. Diese entsprechen den zugehörigen Bezeichnern der Extension, unter Weglassung des Prefix "ARB". Im Abschnitt [[#Bezeichner Zuordnung]] ist zur besseren Auffindbarkeit des Artikels eine Gegenüberstellung der alten und neuen Bezeichner beigefügt.
+
Die Extension wurde in die OpenGL 1.5 Spezifikation aufgenommen. Dieser Artikel berücksichtigt dies, indem hier die mit OpenGL 1.5 eingeführten Bezeichner verwendet werden. Diese entsprechen den zugehörigen Bezeichnern der Extension, unter Weglassung des Suffix "ARB". Im den Abschnitten [[#Neue Funktionen]] und [[#Neue Tokens]] werden zur besseren Auffindbarkeit des Artikels die alten Bezeichner mit angegeben.
 
<br>
 
<br>
 
== Abfragestring ==
 
== Abfragestring ==
Zeile 7: Zeile 7:
  
 
== Beschreibung ==
 
== Beschreibung ==
Diese Erweiterung definiert eine Schnittstelle, mit der verschiedene Arten von Daten im den Speicher des Servers abgelegt werden können. In der Praxis ist der Server oftmals eine Grafikkarte mit eigenen Video Speicher (VRAM). Auf den eigenen VRAM kann die Grafik-Hardware deutlich schneller zugreifen kann, als auf den Client seitigen vorhandenen Hauptspeicher der CPU. Weil es sich bei den Daten oftmals um Vertex-Array-Daten handelt, wurde mit dieser Extension der Begriff "vertex buffer object" abgekürzt VBO eingeführt, was der Extension auch ihren Namen gab.  
+
Diese Erweiterung definiert eine Schnittstelle, mit der verschiedene Arten von Daten im den Speicher des Servers abgelegt werden können. In der Praxis ist der Server oftmals eine Grafikkarte mit eigenem Video Speicher (VRAM). Auf den eigenem VRAM kann die Grafik-Hardware deutlich schneller zugreifen, als auf den clientseitig vorhandenen Hauptspeicher der CPU. Weil es sich bei den abzulegenden Daten oftmals um Vertex-Array-Daten handelt, wurde mit dieser Extension der Begriff "vertex buffer object" abgekürzt VBO eingeführt, was der Extension auch ihren Namen gab.  
  
VBOs sind in ein Speicherblock zusammengefasste Daten, auf die man von der Anwendung aus über die GL zugreifen kann (glBufferData, glBufferSubData, glGetBufferSubData) oder direkt über ein Zeiger auf das Objekt selbst, als würden sich die Daten im Hauptspeicher befinden. Dies wird über eine Technik realisiert, die im Englischen mit "Memory Mapping" und im Deutschen mit "Speichereinblendung" bezeichnet wird.  
+
VBOs sind in ein Speicherblock zusammengefasste Daten, auf die man von der Anwendung aus über die GL zugreifen kann ('''glBufferData''', '''glBufferSubData''', '''glGetBufferSubData''') oder direkt über ein Zeiger auf das Objekt selbst, als wären die Daten in einen normalen Hauptspeicherbereich abgelegt. Dies wird über eine Technik realisiert, die im Englischen mit "Memory Mapping" und im Deutschen mit "Speichereinblendung" bezeichnet wird. Die API der Extension verdeckt die Details dieser Technik soweit, dass auch für weniger leistungsfähiger Hardware - die das Einblenden von VRAM in den Hauptspeicher nicht unterstützt - ein möglichst optimaler Zugriff gewährleistet werden kann.  
  
 +
=== '''Verwendung''' ===
 +
Zuerst holt man sich sich mit '''glGenBuffers''' für jede VBO einen eindeutigen Namen (mit Name ist ein Handle auf das Objekt gemeint):
 +
<pascal>var
 +
  VBO: array[0..2] of TGLuint;
 +
begin
 +
  (...)
 +
  glGenBuffers(3, @VBO);
 +
  (...)</pascal>
 +
Im Beispiel werden für drei VBOs die Namen angefordert. Nun kann man sie mit '''glBindBuffer''' an ein Ziel binden:
 +
<pascal>(...)
 +
  // Der Client soll Vertex Arrays bearbeiten können
 +
  glEnableClientState(GL_VERTEX_ARRAY); 
 +
  // Das 1., noch leere, VBO an das Ziel "Vertex-Array" binden
 +
  glBindBuffer(GL_ARRAY_BUFFER, VBO[0]);
 +
  (...)</pascal>
 +
Über das Ziel, im Beispiel das Vertex-Array, kann man das VBO mit Daten füllen. Entweder man kopiert in Hauptspeicher bereits im richtigen Format vorhandene Daten hinein...
 +
<pascal>(...)
 +
  // Die in MyData vorhandenen Daten in das VBO ablegen
 +
  glBufferData(GL_ARRAY_BUFFER, SizeOf(MyData), MyData, GL_STATIC_DRAW);
 +
  (...)</pascal>
 +
... dann kümmert '''glBufferData''' sich um das Ein- und Ausblenden des Speichers oder man benutzt die Funktion nur zum Reservieren eines Speicherblocks mit der im 2. Parameter übergebenen Größe. In 3. Parameter wird dann '''nil''' übergeben (keine Daten zum Kopieren vorhanden). Um das VBO in den Arbeitsspeicher einzublenden, benutzt man die Funktion '''glMapBuffer'''. Damit wird ein Zeiger zum Beschreiben des Speicherbereiches angefordert und damit das VBO in den Arbeitsspeicher eingeblendet:
 +
<pascal>(...)
 +
const
 +
  PointCount =1000;
 +
type
 +
  PVertex2f = ^TVertex2f;
 +
  TVertex2f = packed record
 +
    X,Y: TGLFloat;
 +
  end;
 +
  PVertex2fArray = ^TVertex2fArray;
 +
  TVertex2fArray = packed array[0..0] of TVertex2f;
  
sseite mittels   Einmal dort gespeichert, können Dadurch kann die Geschwindigkeit der Datenübertragung erhöht werden.  
+
var
=== '''Verwendung''' ===
+
  VBOPointer: PVertex2fArray;
In diesen Abschnitt gehört, wie neue Konstanten etc. verwendet werden.
+
  i: integer;
Nach Möglichkeit sollte Schrittweise allgemein erklärt werden was zu tun ist.
+
  Value: double;
Anschließend sollten dann die Unterpunkte ausgefüllt werden.
+
begin
Nicht alle Unterpunkte müssen immer vorhanden sein.
+
  (...)
 +
  // mit glBufferData ein Speicherblock allokieren
 +
  glBufferData(GL_ARRAY_BUFFER, PointCount*SizeOf(TVertex2f), nil, GL_STATIC_DRAW);
 +
 
 +
  // Zeiger mit Schreibrechten auf das VBO holen
 +
  VBOPointer := glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
 +
  try
 +
    // Vertex-Daten in den VRAM kopieren
 +
    Value := 240;
 +
    for i := 0 to PointCount-1 do begin
 +
      VBOPointer^[i].X := i*5.14;
 +
      VBOPointer^[i].Y := Value;
 +
      Value := Value+Random*50-25;
 +
    end;
 +
   finally
 +
    // Buffer für andere Zugriffe wieder freigeben (VBOPointer ist danach ungültig)
 +
    glUnMapBuffer(GL_ARRAY_BUFFER);
 +
    VBOPointer := nil;
 +
  end;
 +
  (...)</pascal>
 +
Wichtig ist, dass mit glUnMapBuffer das Mapping wieder beendet wird, weil im eingeblendeten Zustand die Anwendung über den Zeiger exclusive Zugriffsrechte auf das VBO bekommt. Das verhindert, dass das Render-System darauf zugreifen kann.
 +
 
 +
== Neue Funktionen ==
 +
Die in der OpenGL Spezifikation >=1.5 verwendeten Bezeichner sind verlinkt. In Klammern dahinter die Bezeichner wie sie in der Extension benutzt werden.
 +
*[[glBindBuffer]]            (glBindBufferARB)           
 +
*[[glDeleteBuffers]]          (glDeleteBuffersARB)
 +
*[[glGenBuffers]]            (glGenBuffersARB)
 +
*[[glIsBuffer]]              (glIsBufferARB)
 +
*[[glBufferData]]            (glBufferDataARB)
 +
*[[glBufferSubData]]          (glBufferSubDataARB)
 +
*[[glGetBufferSubData]]      (glGetBufferSubDataARB)
 +
*[[glMapBuffer]]              (glMapBufferARB)
 +
*[[glUnmapBuffer]]            (glUnmapBufferARB)
 +
*[[glGetBufferParameteriv]]  (glGetBufferParameterivARB)
 +
*[[glGetBufferPointerv]]      (glGetBufferPointervARB)
 +
 
 +
 
 +
== Neue Tokens ==
 +
Die in der OpenGL Spezifikation >=1.5 verwendeten Bezeichner in '''FETT''', in Klammern dahinter die Bezeichner wie sie in der Extension benutzt werden. Für nähere Informationen zu den Token-Werten sollte bei der zugehörigen Funktion nachgeschlagen werden.
 +
 
 +
*'''Für den <nowiki><target></nowiki> Parameter der Funktionen [[glBindBuffer | BindBuffer]], [[glBufferData | BufferData]], [[glBufferSubData | BufferSubData]], [[glMapBuffer | MapBuffer]], [[glUnmapBuffer | UnmapBuffer]], [[glGetBufferSubData | GetBufferSubData]], [[glGetBufferParameteriv | GetBufferParameteriv]] und [[glGetBufferPointerv | GetBufferPointerv]] '''<br>
 +
 
 +
<table border=1 rules=all>
 +
<tr>
 +
<td>'''[[ARRAY_BUFFER]]''' (ARRAY_BUFFER_ARB)</td>
 +
<td>0x8892</td>
 +
<td>Das Ziel ist ein [[Vertexarray|Vertex Array]]</td>
 +
</tr>
 +
<tr>
 +
<td>'''[[ELEMENT_ARRAY_BUFFER]]''' (ELEMENT_ARRAY_BUFFER_ARB)</td>
 +
<td>0x8893</td>
 +
<td>Das Ziel ist ein [[Indexarray | Index Array]]</td>
 +
</tr>
 +
</table>
 +
 
 +
*'''Für den <nowiki><pname></nowiki> Parameter der Funktionen [[glGetBooleanv | GetBooleanv]], [[glGetIntegerv | GetIntegerv]], [[glGetFloatv | GetFloatv]] und [[glGetDoublev | GetDoublev]]'''<br>
 +
 
 +
<table border=1 rules=all>
 +
<tr>
 +
<td>'''ARRAY_BUFFER_BINDING''' (ARRAY_BUFFER_BINDING_ARB)</td>
 +
<td>0x8894</td>
 +
<td>Beschreibung</td>
 +
</tr>
 +
<tr>
 +
<td>'''ELEMENT_ARRAY_BUFFER_BINDING''' (ELEMENT_ARRAY_BUFFER_BINDING_ARB)</td>
 +
<td>0x8895</td>
 +
<td>Beschreibung</td>
 +
</tr>
 +
<tr>
 +
<td>'''VERTEX_ARRAY_BUFFER_BINDING''' (VERTEX_ARRAY_BUFFER_BINDING_ARB)</td>
 +
<td>0x8896</td>
 +
<td>Beschreibung</td>
 +
</tr>
 +
<tr>
 +
<td>'''NORMAL_ARRAY_BUFFER_BINDING''' (NORMAL_ARRAY_BUFFER_BINDING_ARB)</td>
 +
<td>0x8897</td>
 +
<td>Beschreibung</td>
 +
</tr>
 +
<tr>
 +
<td>'''COLOR_ARRAY_BUFFER_BINDING''' (COLOR_ARRAY_BUFFER_BINDING_ARB)</td>
 +
<td>0x8898</td>
 +
<td>Beschreibung</td>
 +
</tr>
 +
<tr>
 +
<td>'''INDEX_ARRAY_BUFFER_BINDING''' (INDEX_ARRAY_BUFFER_BINDING_ARB)</td>
 +
<td>0x8899</td>
 +
<td>Beschreibung</td>
 +
</tr>
 +
<tr>
 +
<td>'''TEXTURE_COORD_ARRAY_BUFFER_BINDING''' (TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB)</td>
 +
<td>0x889A</td>
 +
<td>Beschreibung</td>
 +
</tr>
 +
<tr>
 +
<td>'''EDGE_FLAG_ARRAY_BUFFER_BINDING''' (EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB)</td>
 +
<td>0x889B</td>
 +
<td>Beschreibung</td>
 +
</tr>
 +
<tr>
 +
<td>'''SECONDARY_COLOR_ARRAY_BUFFER_BINDING''' (SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB)</td>
 +
<td>0x889C</td>
 +
<td>Beschreibung</td>
 +
</tr>
 +
<tr>
 +
<td>'''FOG_COORDINATE_ARRAY_BUFFER_BINDING''' (FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB)</td>
 +
<td>0x889D</td>
 +
<td>Beschreibung</td>
 +
</tr>
 +
<tr>
 +
<td>'''WEIGHT_ARRAY_BUFFER_BINDING''' (WEIGHT_ARRAY_BUFFER_BINDING_ARB)</td>
 +
<td>0x889E</td>
 +
<td>Beschreibung</td>
 +
</tr>
 +
</table>
 +
 
 +
 
 +
    Accepted by the <pname> parameter of GetVertexAttribivARB:
 +
 
 +
        VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB      0x889F
  
=== '''Kombinierungsarten''' ===
+
    Accepted by the <usage> parameter of BufferDataARB:
  
{| border=1 rules=all
+
        STREAM_DRAW_ARB                              0x88E0
!Art
+
        STREAM_READ_ARB                              0x88E1
!Formel
+
        STREAM_COPY_ARB                              0x88E2
|-
+
        STATIC_DRAW_ARB                              0x88E4
|OPENGL_NAME_1
+
        STATIC_READ_ARB                              0x88E5
|Berechnungsformel1
+
        STATIC_COPY_ARB                              0x88E6
|}
+
        DYNAMIC_DRAW_ARB                            0x88E8
 +
        DYNAMIC_READ_ARB                            0x88E9
 +
        DYNAMIC_COPY_ARB                            0x88EA
  
 +
    Accepted by the <access> parameter of MapBufferARB:
  
=== '''Operanden''' ===
+
        READ_ONLY_ARB                                0x88B8
Hier gehören Operandenbeschreibungen hin. Wo werden die Operanden eingesetzt. Die Tabelle enthält dann
+
        WRITE_ONLY_ARB                              0x88B9
genaue Infos.
+
        READ_WRITE_ARB                              0x88BA
  
{| border=1 rules=all
+
    Accepted by the <pname> parameter of GetBufferParameterivARB:
!Operand
 
!Beschreibung
 
|-
 
|OPENGL_OPERAND_1
 
|Beschreibung
 
|}
 
  
=== Bezeichner Zuordnung ===
+
        BUFFER_SIZE_ARB                              0x8764
=== Hinweise ===
+
        BUFFER_USAGE_ARB                            0x8765
 +
        BUFFER_ACCESS_ARB                            0x88BB
 +
        BUFFER_MAPPED_ARB                            0x88BC
  
Hier kommen Hinweise zur Extension(!) rein die gesondert erwähnt werden sollten.
+
    Accepted by the <pname> parameter of GetBufferPointervARB:
  
== Neue Funktionen ==
+
        BUFFER_MAP_POINTER_ARB                      0x88BD
Hier Links auf die neuen Funktionen einfügen
 
  
== Neue Tokens ==
 
In die folgenden Abschnitte soll eine Auflistung aller neuen Token in der folgenden Form gemacht werden:
 
  
 
=== Neue Parameterwerte ===
 
=== Neue Parameterwerte ===
 +
Die in der OpenGL Spezifikation >=1.5 verwendeten Bezeichner sind verlinkt. In Klammern dahinter die Bezeichner wie sie in der Extension benutzt werden.
 +
 
'''Für <nowiki>[[glEinOGLBefehl]]</nowiki>'''<br>
 
'''Für <nowiki>[[glEinOGLBefehl]]</nowiki>'''<br>
 
wenn ''pname'' '''GL_PARAMTER_NAME''' ist, dann ist/sind für ''param'' folgende(r) zusätzliche(r) Wert(e) gültig:
 
wenn ''pname'' '''GL_PARAMTER_NAME''' ist, dann ist/sind für ''param'' folgende(r) zusätzliche(r) Wert(e) gültig:
Zeile 89: Zeile 236:
  
 
== Ressourcen ==
 
== Ressourcen ==
Hier muss mindestens ein Link auf die Orginalspezifikation (bei oss.sgi.com/...) stehen.
+
*[http://opengl.org/registry/specs/ARB/vertex_buffer_object.txt Orginalspezifikation]
 +
*[[Tutorial_Vertexbufferobject| Vertexbufferobject Tutorial]]

Version vom 4. Oktober 2008, 22:20 Uhr

Achtung: Dies ist nur eine Arbeitsvorlage für die Seiten die ich gerade erstelle.

ARB_vertex_buffer_object

Die Extension wurde in die OpenGL 1.5 Spezifikation aufgenommen. Dieser Artikel berücksichtigt dies, indem hier die mit OpenGL 1.5 eingeführten Bezeichner verwendet werden. Diese entsprechen den zugehörigen Bezeichnern der Extension, unter Weglassung des Suffix "ARB". Im den Abschnitten #Neue Funktionen und #Neue Tokens werden zur besseren Auffindbarkeit des Artikels die alten Bezeichner mit angegeben.

Abfragestring

GL_ARB_vertex_buffer_object

Beschreibung

Diese Erweiterung definiert eine Schnittstelle, mit der verschiedene Arten von Daten im den Speicher des Servers abgelegt werden können. In der Praxis ist der Server oftmals eine Grafikkarte mit eigenem Video Speicher (VRAM). Auf den eigenem VRAM kann die Grafik-Hardware deutlich schneller zugreifen, als auf den clientseitig vorhandenen Hauptspeicher der CPU. Weil es sich bei den abzulegenden Daten oftmals um Vertex-Array-Daten handelt, wurde mit dieser Extension der Begriff "vertex buffer object" abgekürzt VBO eingeführt, was der Extension auch ihren Namen gab.

VBOs sind in ein Speicherblock zusammengefasste Daten, auf die man von der Anwendung aus über die GL zugreifen kann (glBufferData, glBufferSubData, glGetBufferSubData) oder direkt über ein Zeiger auf das Objekt selbst, als wären die Daten in einen normalen Hauptspeicherbereich abgelegt. Dies wird über eine Technik realisiert, die im Englischen mit "Memory Mapping" und im Deutschen mit "Speichereinblendung" bezeichnet wird. Die API der Extension verdeckt die Details dieser Technik soweit, dass auch für weniger leistungsfähiger Hardware - die das Einblenden von VRAM in den Hauptspeicher nicht unterstützt - ein möglichst optimaler Zugriff gewährleistet werden kann.

Verwendung

Zuerst holt man sich sich mit glGenBuffers für jede VBO einen eindeutigen Namen (mit Name ist ein Handle auf das Objekt gemeint):

var
  VBO: array[0..2] of TGLuint;
begin
  (...)
  glGenBuffers(3, @VBO);
  (...)

Im Beispiel werden für drei VBOs die Namen angefordert. Nun kann man sie mit glBindBuffer an ein Ziel binden:

(...)
  // Der Client soll Vertex Arrays bearbeiten können
  glEnableClientState(GL_VERTEX_ARRAY);  
  // Das 1., noch leere, VBO an das Ziel "Vertex-Array" binden
  glBindBuffer(GL_ARRAY_BUFFER, VBO[0]);
  (...)

Über das Ziel, im Beispiel das Vertex-Array, kann man das VBO mit Daten füllen. Entweder man kopiert in Hauptspeicher bereits im richtigen Format vorhandene Daten hinein...

(...)
  // Die in MyData vorhandenen Daten in das VBO ablegen
  glBufferData(GL_ARRAY_BUFFER, SizeOf(MyData), MyData, GL_STATIC_DRAW);
  (...)

... dann kümmert glBufferData sich um das Ein- und Ausblenden des Speichers oder man benutzt die Funktion nur zum Reservieren eines Speicherblocks mit der im 2. Parameter übergebenen Größe. In 3. Parameter wird dann nil übergeben (keine Daten zum Kopieren vorhanden). Um das VBO in den Arbeitsspeicher einzublenden, benutzt man die Funktion glMapBuffer. Damit wird ein Zeiger zum Beschreiben des Speicherbereiches angefordert und damit das VBO in den Arbeitsspeicher eingeblendet:

(...)
const
  PointCount =1000;
type
  PVertex2f = ^TVertex2f;
  TVertex2f = packed record
    X,Y: TGLFloat;
  end;
  PVertex2fArray = ^TVertex2fArray;
  TVertex2fArray = packed array[0..0] of TVertex2f;

var
  VBOPointer: PVertex2fArray;
  i: integer;
  Value: double;
begin
  (...)
  // mit glBufferData ein Speicherblock allokieren
  glBufferData(GL_ARRAY_BUFFER, PointCount*SizeOf(TVertex2f), nil, GL_STATIC_DRAW);

  // Zeiger mit Schreibrechten auf das VBO holen
  VBOPointer := glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
  try
    // Vertex-Daten in den VRAM kopieren
    Value := 240;
    for i := 0 to PointCount-1 do begin
      VBOPointer^[i].X := i*5.14;
      VBOPointer^[i].Y := Value;
      Value := Value+Random*50-25;
    end;
  finally
    // Buffer für andere Zugriffe wieder freigeben (VBOPointer ist danach ungültig)
    glUnMapBuffer(GL_ARRAY_BUFFER);
    VBOPointer := nil;
  end;
  (...)

Wichtig ist, dass mit glUnMapBuffer das Mapping wieder beendet wird, weil im eingeblendeten Zustand die Anwendung über den Zeiger exclusive Zugriffsrechte auf das VBO bekommt. Das verhindert, dass das Render-System darauf zugreifen kann.

Neue Funktionen

Die in der OpenGL Spezifikation >=1.5 verwendeten Bezeichner sind verlinkt. In Klammern dahinter die Bezeichner wie sie in der Extension benutzt werden.


Neue Tokens

Die in der OpenGL Spezifikation >=1.5 verwendeten Bezeichner in FETT, in Klammern dahinter die Bezeichner wie sie in der Extension benutzt werden. Für nähere Informationen zu den Token-Werten sollte bei der zugehörigen Funktion nachgeschlagen werden.

ARRAY_BUFFER (ARRAY_BUFFER_ARB) 0x8892 Das Ziel ist ein Vertex Array
ELEMENT_ARRAY_BUFFER (ELEMENT_ARRAY_BUFFER_ARB) 0x8893 Das Ziel ist ein Index Array
ARRAY_BUFFER_BINDING (ARRAY_BUFFER_BINDING_ARB) 0x8894 Beschreibung
ELEMENT_ARRAY_BUFFER_BINDING (ELEMENT_ARRAY_BUFFER_BINDING_ARB) 0x8895 Beschreibung
VERTEX_ARRAY_BUFFER_BINDING (VERTEX_ARRAY_BUFFER_BINDING_ARB) 0x8896 Beschreibung
NORMAL_ARRAY_BUFFER_BINDING (NORMAL_ARRAY_BUFFER_BINDING_ARB) 0x8897 Beschreibung
COLOR_ARRAY_BUFFER_BINDING (COLOR_ARRAY_BUFFER_BINDING_ARB) 0x8898 Beschreibung
INDEX_ARRAY_BUFFER_BINDING (INDEX_ARRAY_BUFFER_BINDING_ARB) 0x8899 Beschreibung
TEXTURE_COORD_ARRAY_BUFFER_BINDING (TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB) 0x889A Beschreibung
EDGE_FLAG_ARRAY_BUFFER_BINDING (EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB) 0x889B Beschreibung
SECONDARY_COLOR_ARRAY_BUFFER_BINDING (SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB) 0x889C Beschreibung
FOG_COORDINATE_ARRAY_BUFFER_BINDING (FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB) 0x889D Beschreibung
WEIGHT_ARRAY_BUFFER_BINDING (WEIGHT_ARRAY_BUFFER_BINDING_ARB) 0x889E Beschreibung


   Accepted by the <pname> parameter of GetVertexAttribivARB:
       VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB       0x889F
   Accepted by the <usage> parameter of BufferDataARB:
       STREAM_DRAW_ARB                              0x88E0
       STREAM_READ_ARB                              0x88E1
       STREAM_COPY_ARB                              0x88E2
       STATIC_DRAW_ARB                              0x88E4
       STATIC_READ_ARB                              0x88E5
       STATIC_COPY_ARB                              0x88E6
       DYNAMIC_DRAW_ARB                             0x88E8
       DYNAMIC_READ_ARB                             0x88E9
       DYNAMIC_COPY_ARB                             0x88EA
   Accepted by the <access> parameter of MapBufferARB:
       READ_ONLY_ARB                                0x88B8
       WRITE_ONLY_ARB                               0x88B9
       READ_WRITE_ARB                               0x88BA
   Accepted by the <pname> parameter of GetBufferParameterivARB:
       BUFFER_SIZE_ARB                              0x8764
       BUFFER_USAGE_ARB                             0x8765
       BUFFER_ACCESS_ARB                            0x88BB
       BUFFER_MAPPED_ARB                            0x88BC
   Accepted by the <pname> parameter of GetBufferPointervARB:
       BUFFER_MAP_POINTER_ARB                       0x88BD


Neue Parameterwerte

Die in der OpenGL Spezifikation >=1.5 verwendeten Bezeichner sind verlinkt. In Klammern dahinter die Bezeichner wie sie in der Extension benutzt werden.

Für [[glEinOGLBefehl]]
wenn pname GL_PARAMTER_NAME ist, dann ist/sind für param folgende(r) zusätzliche(r) Wert(e) gültig:

GL_TOKEN_NAME HexCode des Tokens Beschreibung


Für [[glEinOGLBefehl]]
wenn pname ...



Neue States

Name Abfrage mit Initialwert
OPENGL_STATE_1 GetFunction Wert

Abhängigkeiten

Interne Links auf Extensions von denen die hier beschriebene abhängt


Ressourcen