glBindAttribLocation: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Fehlermeldungen)
(Fehlermeldungen)
Zeile 1: Zeile 1:
= glBindAttribLocationARB =
 
 
<br>
 
== Name ==
 
'''glBindAttribLocationARB''' - Verbindet ein generisches Vertex-Attribut mit einer Attribut-Variable.
 
 
<br>
 
== Delphi-Spezifikation ==
 
procedure '''glBindAttribLocationARB'''(''program'' : GLhandleARB; ''index'' : GLuint; '''const''' ''name'' : ^GLcharARB)
 
 
<br>
 
 
== Parameter ==
 
 
{| border="1" rules="all"
 
! ''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.
 
|}
 
 
<br>
 
 
== 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 0-terminierter 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, verwenden. 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 dafür gesorgt, 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.
 
 
'''glBindAttribLocation''' kann zu jeder Zeit aufgerufen werden. Allerdings wirken sich Attribut-Verknüpfungen erst aus, wenn [[glLinkProgramARB]] aufgerufen wird. Sobald ein Shaderprogramm-Objekt erfolgreich gelinkt worden, bleiben die Index-Werte für Attribut-Variablen bis zum nächsten Link-Aufruf gleich.
 
 
 
Es ist nicht erlaubt, irgendeins der Standard-OpenGL-Vertexattribute mit Hilfe dieser Funktion zu verknüfen, da sie automatisch bei Bedarf verknüpft werden. Attribut-Bindungen die nach dem Linken vollzogen werden treten erst mit dem nächsten erfolgreichen Linkvorgang in Kraft.
 
<br>
 
 
== 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, dass mehr als ein Vertexshader-Attribut-Name mit dem selben generischen Vertex-Attribut-Index verknüpft wird. Dieser Vorgang wird "Aliasing" genannt, und es ist nur zulässig, wenn nur einer der "aliased" Attribute im ausgeführten Programm aktiv ist oder es keinen Pfad gibt, durch den mehrere "aliased" gebundene Attribute im Shader benutzt werden, die am selben Index gebunden sind. Compiler und Linker dürfen annehmen, dass kein "Aliasing" verwendet wird und es steht ihnen frei, Optimierungen anzuwenden, die nur in der Abwesenheit von "Aliasing" funktionieren. <br>OpenGL-Implementationen müssen keine Überprüfung vornehmen, ob "Aliasing" angwendet werden könnte. <br>
 
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.
 
<br>
 
 
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
 
'''GL_INVALID_VALUE'''  wird generiert, wenn ''index'' größer oder gleich '''GL_MAX_VERTEX_ATTRIBS_ARB''' ist.<br>
 
'''GL_INVALID_VALUE'''  wird generiert, wenn ''index'' größer oder gleich '''GL_MAX_VERTEX_ATTRIBS_ARB''' ist.<br>
Zeile 64: Zeile 7:
  
 
<br>
 
<br>
 
==  Zugehörige Wertrückgaben ==
 
[[glGetActiveAttribARB]]  mit Argument ''program''<br>
 
 
[[glGetAttribLocationARB]] mit den Argumenten ''program'' und ''name''<br>
 
 
[[glGet]] mit Token [[GL_MAX_VERTEX_ATTRIBS_ARB|GL_MAX_VERTEX_ATTRIBS_ARB]]
 
 
<br>
 
 
== Siehe auch ==
 
[[glDisableVertexAttribArrayARB]], [[glEnableVertexAttribArrayARB]], [[glUseProgramObjectARB]], [[glVertexAttribARB]], [[glVertexAttribPointerARB]]<br>
 
 
[[Kategorie:GL|BindAttribLocationARB]]
 

Version vom 28. August 2005, 02:57 Uhr

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.