GL ARB draw instanced

Aus DGL Wiki
Version vom 1. August 2009, 15:27 Uhr von Coolcat (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „{{Offline}} = GL_ARB_draw_instanced = {{Hinweis|Die Orginalspezifikation finden Sie unter "Ressourcen" am Ende des Artikels.}} <br> == Abfragestring == GL_ARB_d...“)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche
Hinweis: Dieser Artikel wird gerade Offline bearbeitet!

Bitte haben Sie etwas Geduld und nehmen Sie keine Änderungen vor, bis der Artikel hochgeladen wurde.

(weitere Artikel)
WIP Offline.jpg

GL_ARB_draw_instanced

Info DGL.png Die Orginalspezifikation finden Sie unter "Ressourcen" am Ende des Artikels.


Abfragestring

GL_ARB_draw_instanced

Beschreibung

Ein häufiger Anwendungsfall für OpenGL-Applikationen ist das mehrfache rendern des gleichen Objektes oder einer Gruppe von ähnlichen Objekten die sich Vertex-Daten, Primitiv-Anzahl und -Typ teilen. Diese Extension beschleunigt solche Anwendungen in dem die Anzahl der API-Aufrufe und die Menge redundanter Daten reduziert wird.

Mit glDrawArraysInstancedARB und glDrawElementsInstancedARB werden zwei neue API-Funktionen eingeführt. Diese sind jeweils äquivalent zu einer Serie von Aufrufen der Funktionen glDrawArrays bzw. glDrawElements. Jeder Aufruf glDraw*-Aufruf innerhalb einer solchen Serie wird Instanz genannt.

Diese Extension führt mit gl_InstanceIDARB ein neues Attribut für GLSL-Vertexshader ein. Diese Variable wird zunächst mit 0 initialisiert und dann mit jeder Instanz der Serie inkrementiert.

Diese Instanz ID (oder Vielfache davon) können als Index für ein Uniform-Array, eine Textur oder ein Textur-Buffer-Objekt mit Transformations-Daten genutzt werden. Ein Vertexshader ist so in der Lage mehrere Instanzen eines Objektes mit einem einzigen glDraw*-Aufruf zu rendern.

Verwendung

Info DGL.png ...kommt noch...


Hinweise

Es wird ein GL_INVALID_OPERATION generiert, wenn die Funktion glDrawArraysInstancedARB oder glDrawElementsInstancedARB innerhalb einer Displayliste verwendet wird.

Neue Attribute in GLSL

Sofern GL_EXT_gpu_shader4 verfügbar ist oder OpenGL 3.0 verwendet wird, stehen die folgenden neuen Attribute im Vertexshader zur Verfügung. Wie alle Attribute können sie nur gelesen werden.

  • int gl_InstanceIDARB
Ein 32-bit Integer-Zähler der die Nummer der gerade gerenderten Instanz enthält.
Wird kein Instancing verwendet, hat gl_InstanceIDARB den Wert 0. Wenn GL_EXT_gpu_shader4 unterstützt wird, haben gl_InstanceID und gl_InstanceIDARB den gleichen Wert.

Neue Attribute im Vertexprogramm

Sofern GL_NV_vertex_shader4 verfügbar ist, stehen die folgenden neuen Attribute in Vertexprogrammen zur Verfügung. Wie alle Attribute können sie nur gelesen werden.

  • int vertex.instance
Ein 32-bit Integer-Zähler der die Nummer der gerade gerenderten Instanz enthält.
Wird kein Instancing verwendet, hat vertex.instance den Wert 0.

Neue OpenGL-Funktionen

Abhängigkeiten

Es wird OpenGL 2.0 benötigt. Die Extension wurde anhand der OpenGL 2.1 Spezifikation geschrieben.

Zudem muss mindestens eine der folgenden Abhängigkeiten verfügbar sein:

Ressourcen