glBindAttribLocation: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Fehlermeldungen)
K (Siehe auch)
 
(11 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
= glBindAttribLocationARB =
+
= glBindAttribLocation (glBindAttribLocationARB) =
 +
 
  
<br>
 
 
== Name ==
 
== Name ==
'''glBindAttribLocationARB''' - Verbindet ein generisches Vertex-Attribut mit einer Attribut-Variable.
+
'''glBindAttribLocation''' - Verbindet ein generisches Vertex-Attribut mit einer Attribut-Variable.
 +
 
  
<br>
 
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
  procedure '''glBindAttribLocationARB'''(''program'' : GLhandleARB; ''index'' : GLuint; '''const''' ''name'' : ^GLcharARB)
+
  procedure '''glBindAttribLocation'''(''program'', ''index'' : GLuint; ''name'' : PGLchar)
 +
procedure '''glBindAttribLocationARB'''(''program'' : GLhandleARB; ''index'' : GLuint; ''name'' : PGLcharARB)
 +
 
  
<br>
 
  
 
== Parameter ==
 
== Parameter ==
Zeile 15: Zeile 16:
 
{| border="1" rules="all"
 
{| border="1" rules="all"
 
! ''program''  
 
! ''program''  
| Gibt das Handle des Shader-Programm-Objekts an, in dem das verbinden des generischen Vertex-Attributs mit der Attribut-Variable vollzogen werden soll.
+
| Gibt das Handle des Shader-Programm-Objekts an, in dem das Verbinden des generischen Vertex-Attributs mit der Attribut-Variable vollzogen werden soll.
 
|-
 
|-
 
! ''index''  
 
! ''index''  
Zeile 21: Zeile 22:
 
|-
 
|-
 
! ''name''
 
! ''name''
| Gibt einen unterminierten String an, der den Namen der Vertexshader-Attribut-Variable enthält, an die  
+
| Gibt einen nullterminierten String an, der den Namen der Vertexshader-Attribut-Variable enthält, an die ''index'' gebunden werden soll.
''index'' gebunden werden soll.
 
 
|}
 
|}
  
<br>
+
== Beschreibung ==
 +
'''glBindAttribLocation''' 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.
  
== 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.
 
  
  
Zeile 34: Zeile 33:
  
  
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.
+
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 [[glUseProgram]] 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.
  
  
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 ==
 
== Hinweise ==
'''glBindAttribLocationARB''' kann aufgerufen werden, bevor ein Vertexshader-Objekt an sein Programmobjekt gebunden wird.
+
'''glBindAttribLocation''' 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 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.
  
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.
 
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 [[glLinkProgram]] aufgerufen wird. Die zugewiesenen Positionen können mit [[glGetAttribLocatio]] abgefragt werden.
  
Aktive Attribute, die nicht explizit verknüpft werden, werden verknüpft, wenn [[glLinkProgramARB]] aufgerufen wird. Die zugewiesenen Positionen können mit [[glGetAttrinLocationARB]] abgefragt werden.
+
'''glBindAttribLocation''' ist seit OpenGL Version 2.0 eine Kernfunktion. Davor war nur die ARB-Variante verfügbar.
<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.
'''GL_INVALID_OPERATION''' wird generiert, wenn ''name'' mit dem reservierten Präfix "gl_" beginnt.<br>
+
 
'''GL_INVALID_VALUE''' wird generiert, wenn ''program'' kein von OpenGL erzeugtes Programmhandle ist.<br>
+
'''GL_INVALID_OPERATION''' wird generiert, wenn ''name'' mit dem reservierten Präfix "gl_" beginnt.
'''GL_INVALID_OPERATION''' wird generiert, wenn ''program'' nicht vom Typ '''GL_PROGRAM_OBJECT_ARB''' ist.<br>
+
 
'''GL_INVALID_OPERATION''' wird generiert wenn '''glBindAttribLocationARB''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird.  
+
'''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 '''glBindAttribLocation''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird.  
 +
 
  
<br>
 
  
 
==  Zugehörige Wertrückgaben ==
 
==  Zugehörige Wertrückgaben ==
[[glGetActiveAttribARB]]  mit Argument ''program''<br>
+
[[glGetActiveAttrib]]  mit Argument ''program''
  
[[glGetAttribLocationARB]] mit den Argumenten ''program'' und ''name''<br>
+
[[glGetAttribLocation]] mit den Argumenten ''program'' und ''name''
  
 
[[glGet]] mit Token [[GL_MAX_VERTEX_ATTRIBS_ARB|GL_MAX_VERTEX_ATTRIBS_ARB]]
 
[[glGet]] mit Token [[GL_MAX_VERTEX_ATTRIBS_ARB|GL_MAX_VERTEX_ATTRIBS_ARB]]
  
<br>
+
 
  
 
== Siehe auch ==
 
== Siehe auch ==
[[glDisableVertexAttribArrayARB]], [[glEnableVertexAttribArrayARB]], [[glUseProgramObjectARB]], [[glVertexAttribARB]], [[glVertexAttribPointerARB]]<br>
+
[[glDisableVertexAttribArray]], [[glEnableVertexAttribArray]], [[glUseProgram]], [[glVertexAttrib]], [[glVertexAttribPointer]]
  
[[Kategorie:GL|BindAttribLocationARB]]
+
[[Kategorie:GL|BindAttribLocation]]
 +
[[Kategorie:GL2.0|BindAttribLocation]]
 +
[[Kategorie:GL3|BindAttribLocation]]

Aktuelle Version vom 21. Februar 2014, 17:46 Uhr

glBindAttribLocation (glBindAttribLocationARB)

Name

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


Delphi-Spezifikation

procedure glBindAttribLocation(program, index : GLuint; name : PGLchar)
procedure glBindAttribLocationARB(program : GLhandleARB; index : GLuint; name : PGLcharARB)


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 nullterminierten String an, der den Namen der Vertexshader-Attribut-Variable enthält, an die index gebunden werden soll.

Beschreibung

glBindAttribLocation 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 glUseProgram 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

glBindAttribLocation 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 glLinkProgram aufgerufen wird. Die zugewiesenen Positionen können mit glGetAttribLocatio abgefragt werden.

glBindAttribLocation ist seit OpenGL Version 2.0 eine Kernfunktion. Davor war nur die ARB-Variante verfügbar.

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 glBindAttribLocation innerhalb eines glBegin-glEnd Blocks aufgerufen wird.


Zugehörige Wertrückgaben

glGetActiveAttrib mit Argument program

glGetAttribLocation mit den Argumenten program und name

glGet mit Token GL_MAX_VERTEX_ATTRIBS_ARB


Siehe auch

glDisableVertexAttribArray, glEnableVertexAttribArray, glUseProgram, glVertexAttrib, glVertexAttribPointer