glBindAttribLocation

Aus DGL Wiki
Version vom 28. August 2005, 01:59 Uhr von Flash (Diskussion | Beiträge) (Fehlermeldungen)

Wechseln zu: Navigation, Suche

glBindAttribLocationARB


Name

glBindAttribLocationARB - Verbindet ein generisches Vertex-Attribut mit einer Attribut-Variable.


Delphi-Spezifikation

procedure glBindAttribLocationARB(program : GLhandleARB; index : GLuint; const name : ^GLcharARB)


Parameter

program Gibt das Handle des Shader-Programm-Objekts an, in dem das verbinden des generischen Vertex-Attributs mit der Attribut-Variable vollzogen werden soll.
index Gibt den Index des generischen Vertex-Attributes an, das gebunden werden soll.
name Gibt einen unterminierten String an, der den Namen der Vertexshader-Attribut-Variable enthält, an die

index gebunden werden soll.


Beschreibung

glBindAttribLocationARB wird verwendet um einen generischen Vertexshader-Attribut-Index mit einer Vertexshader-Attribut-Variable zu verknüpfen. Der Name der Vertexshader-Attribut-Variable wird als ein unterminierter String in name übergeben. Das generische Vertex-Attribut, das an diese Variable gebunden werden soll, wird mit index spezifiziert. Wenn der/die auszuführende(n) Shader, auf die program zeigt, Teil des akteuellen Status werden, verändern die Werte, die durch den generischen Vertex-Attribut-Index übergeben werden, den Wert der durch name spezifizierten Vertexshader-Attribut-Variable.

Wenn sich name auf eine Matrix-Attribut-Variable bezieht, bezieht sich index auf die erste Spalte der Matrix. Die anderen Spalten werden dann automatisch an die Positionen index+1 (für mat2), index+1 und index+2 (für mat3) und index+1, index+2 und index+3 (für mat4) gebunden.

Dieser Befehl macht es möglich, dass Vertexshader anschauliche Namen für Attribut-Variablen anstatt generischer Namen, nummeriert von 0 bis GL_MAX_VERTEX_ATTRIBS - 1. Die Werte, die an jeden generischen Attribut-Index gesendet werden, sind Teil das aktuellen Zustands, genauso wie Standard-Vertex-Attribute wie Farbe, Normale und Vertex-Position. Wird ein anderes Shaderprogramm-Objekt durch den Aufruf von glUseProgramObjectARB aktuell, wird das ganze so gedeichselt (sorry, der musste sein *zwinker*), dass der Wert des generischen Vertex-Attributs i im neuen Shaderprogramm-Objekt der gleiche ist wie der Wert des generischen Vertex-Attributs i im alten Shaderprogramm-Objekt.

Attribut-Verknüpfungen treten solange nicht in Effekt, bis glLinkProgramARB aufgerufen wird. Sobald ein Shaderprogramm-Objekt erfolgreich gelinkt worden, bleiben die Index-Werte für Attribut-Variablen bis zum nächsten Link-Auruf gleich.

Es ist nicht erlaubt, irgendeinen der Standard-OpenGL-Vertexattribute mit Hilfe dieser Funktion zu verknüfen, da sie automatisch bei Bedarf verknüpft werden.

Hinweise

glBindAttribLocationARB kann aufgerufen werden, bevor ein Vertexshader-Objekt an sein Programmobjekt gebunden wird.

Es ist auch zulässig, einen generischen Attribut-Index an einen Attribut-Variablen-Namen zu binden, der niemals im Vertexshader verwendet wird. Trotzdem wird aber einer der verfügbaren generischen Vertex-Attribut-Slots verbraucht.

Es ist erlaubt, das mehr als ein Vertexshader-Attribut-Name mit dem selben generischen Vertex-Attribut-Index verknüpft wird. Das wird "Aliasing" genannt, und es ist nur zulässig, wenn nur einer der "aliased" Attribute im ausgeführten Programm aktiv ist. Der Compiler und der Linker dürfen annehmen, dass kein "Aliasing" verwendet wird und es steht ihnen frei, Optimierungen anzuwenden, die nur in der Abwesenheit von "Aliasing" funktionieren. OpenGL-Implementationen müssen keine Überprüfung vornehmen, ob "Aliasing" angwendet werden könnte.
Da es nicht möglich ist, Standard-Attribute zu verknüpfen, ist es folglich auch nicht möglich, generische Attribute mit konventionellen zu verbinden.

Aktive Attribute, die nicht explizit verknüpft werden, werden verknüpft, wenn glLinkProgramARB aufgerufen wird. Die zugewiesenen Positionen können mit glGetAttrinLocationARB abgefragt werden.

Fehlermeldungen

GL_INVALID_VALUE wird generiert, wenn index größer oder gleich GL_MAX_VERTEX_ATTRIBS_ARB ist.
GL_INVALID_OPERATION wird generiert, wenn name mit dem reservierten Präfix "gl_" beginnt.
GL_INVALID_VALUE wird generiert, wenn program kein von OpenGL erzeugtes Programmhandle ist.
GL_INVALID_OPERATION wird generiert, wenn program nicht vom Typ GL_PROGRAM_OBJECT_ARB ist.
GL_INVALID_OPERATION wird generiert wenn glBindAttribLocationARB innerhalb eines glBegin-glEnd Blocks aufgerufen wird.


Zugehörige Wertrückgaben

glGetActiveAttribARB mit Argument program

glGetAttribLocationARB mit den Argumenten program und name

glGet mit Token GL_MAX_VERTEX_ATTRIBS_ARB


Siehe auch

glDisableVertexAttribArrayARB, glEnableVertexAttribArrayARB, glUseProgramObjectARB, glVertexAttribARB, glVertexAttribPointerARB