glLinkProgram: Unterschied zwischen den Versionen
Flash (Diskussion | Beiträge) |
DGLBot (Diskussion | Beiträge) K (Bot: konvertiere/korrigiere <BR>) |
||
(8 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | + | = glLinkProgramARB = | |
+ | == Name == | ||
+ | '''glLinkProgram''' - linkt die momentan an ein Programmobjekt gebundenen Shader, um daraus einen Satz ausführbarer Shader zu erstellen. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
− | procedure ''' | + | procedure '''glLinkProgram'''(''programObj'' GLHandle); |
+ | |||
+ | |||
+ | |||
− | |||
== Parameter == | == Parameter == | ||
<table border=1 rules=all> | <table border=1 rules=all> | ||
Zeile 24: | Zeile 23: | ||
</table> | </table> | ||
− | + | ||
+ | |||
== Beschreibung == | == Beschreibung == | ||
'''glLinkProgram''' linkt die momentan an ''programObj'' gebundenen Shader, um daraus einen Satz ausführbarer Shader zu erstellen. Wenn Shaderobjekte vom Typ ''GL_VERTEX_SHADER'' an ''programObj'' angehangen sind, werden diese genutzt um einen ausführbaren Shader zu erstellen der auf dem programmierbaren '''Vertexprozessor''' abläuft. Sind Shaderobjekte vom Typ ''GL_FRAGMENT_SHADER'' an ''programObj'' angehangen, so werden diese genutzt um den ausführbaren Shader zu erstellen der auf dem programmierbaren '''Fragmentprozessor''' läuft. | '''glLinkProgram''' linkt die momentan an ''programObj'' gebundenen Shader, um daraus einen Satz ausführbarer Shader zu erstellen. Wenn Shaderobjekte vom Typ ''GL_VERTEX_SHADER'' an ''programObj'' angehangen sind, werden diese genutzt um einen ausführbaren Shader zu erstellen der auf dem programmierbaren '''Vertexprozessor''' abläuft. Sind Shaderobjekte vom Typ ''GL_FRAGMENT_SHADER'' an ''programObj'' angehangen, so werden diese genutzt um den ausführbaren Shader zu erstellen der auf dem programmierbaren '''Fragmentprozessor''' läuft. | ||
Zeile 55: | Zeile 55: | ||
Das Informationslog des Programmobjektes wird aktualisiert, und der Satz ausführbarer Shader wird generiert, sobald der Linkvorgang ausgeführt wird. Nach dem Linken steht es der Anwendung offen, nicht mehr benötigte Shaderobjekte zu modifizieren oder zu löschen. Keine dieser Operationen werden dann die bereits kompilierten Shader des Programmobjektes verändern. | Das Informationslog des Programmobjektes wird aktualisiert, und der Satz ausführbarer Shader wird generiert, sobald der Linkvorgang ausgeführt wird. Nach dem Linken steht es der Anwendung offen, nicht mehr benötigte Shaderobjekte zu modifizieren oder zu löschen. Keine dieser Operationen werden dann die bereits kompilierten Shader des Programmobjektes verändern. | ||
− | + | ||
+ | |||
== Hinweise == | == Hinweise == | ||
'''glLinkProgram''' ist erst ab OpenGL Version 2.0 verfügbar. (Frühere Versionen können [[glLinkProgramARB]] enthalten.) | '''glLinkProgram''' ist erst ab OpenGL Version 2.0 verfügbar. (Frühere Versionen können [[glLinkProgramARB]] enthalten.) | ||
Zeile 61: | Zeile 62: | ||
War das Linken erfolgreich gehen alle Linkinformationen zu einem vorhergehenden Linkversuch verloren (werden überschrieben). Das bedeutet z.B. das ein fehlgeschlagener Versuch nicht den alten Status von ''programObj'' wiederherstellt. Es können aber selbst dann noch einige Informationen von ''programObj'' ausgelesen werden. Siehe dazu [[glGetActiveAttrib]] und [[glGetActiveUniform]]. | War das Linken erfolgreich gehen alle Linkinformationen zu einem vorhergehenden Linkversuch verloren (werden überschrieben). Das bedeutet z.B. das ein fehlgeschlagener Versuch nicht den alten Status von ''programObj'' wiederherstellt. Es können aber selbst dann noch einige Informationen von ''programObj'' ausgelesen werden. Siehe dazu [[glGetActiveAttrib]] und [[glGetActiveUniform]]. | ||
− | + | ||
+ | |||
== Fehlermeldungen == | == Fehlermeldungen == | ||
'''GL_INVALID_VALUE''' wird generiert wenn ''programOjb'' kein gültiges Objekthandle ist. | '''GL_INVALID_VALUE''' wird generiert wenn ''programOjb'' kein gültiges Objekthandle ist. | ||
Zeile 69: | Zeile 71: | ||
'''GL_INVALID_OPERATION''' wird generiert wenn [[glLinkProgram]] zwischen einem [[glBegin]] und dem passenden [[glEnd]] aufgerufen wird. | '''GL_INVALID_OPERATION''' wird generiert wenn [[glLinkProgram]] zwischen einem [[glBegin]] und dem passenden [[glEnd]] aufgerufen wird. | ||
− | + | ||
+ | |||
== Zugehörige Wertrückgaben == | == Zugehörige Wertrückgaben == | ||
− | [[ | + | [[glGet]] mit dem Token [[glGet#GL_CURRENT_PROGRAM|GL_CURRENT_PROGRAM]]. |
+ | |||
+ | [[glGetActiveAttrib]] mit dem Argument ''programObj'' und dem Index einer aktiven Attributvariable. | ||
− | [[ | + | [[glGetActiveUniform]] mit dem Argument ''programObj'' und dem Index einer aktiven Uniformvariable. |
− | [[ | + | [[glGetAttachedShaders]] mit dem Argument ''programObj''. |
− | [[ | + | [[glGetAttribLocation]] mit dem Argument ''programObj'' und dem Namen einer Attributvariable. |
+ | |||
+ | [[glGetProgram]] mit den Argumenten ''programObj'' und '''GL_LINK_STATUS'''. | ||
+ | |||
+ | [[glGetProgramInfoLog]] mit den Argumenten ''programObj'' | ||
+ | |||
+ | [[glGetUniform]] mit dem Argument ''programObj'' und dem Platz(Location) einer Uniformvariable. | ||
+ | |||
+ | [[glGetUniformLocation]] mit dem Argument ''programObj'' und dem Namen einer Uniformvariable. | ||
+ | |||
+ | [[glIsProgram]] | ||
− | |||
− | |||
− | |||
− | |||
== Siehe auch == | == Siehe auch == | ||
− | [[ | + | [[glAttachShader]], [[glBindAttribLocation]], [[glCompileShader]], [[glCreateProgram]], [[glDeleteProgram]], [[glDetachShader]], [[glUniform]], [[glUseProgram]], [[glValidateProgram]] |
+ | |||
'''Hintergrundwissen :''' [[Shader]]<br> | '''Hintergrundwissen :''' [[Shader]]<br> | ||
− | [http://developer.3dlabs.com/ | + | [http://developer.3dlabs.com/documents/GLmanpages/glLinkProgram.htm Englische Orginalversion] (Copyright 3DLabs Inc.)<br> |
+ | |||
− | [[Kategorie:GL| | + | [[Kategorie:GL|LinkProgram]] |
+ | [[Kategorie:SHADER_OBJECTS|LinkProgram]] |
Aktuelle Version vom 22. April 2006, 19:22 Uhr
Inhaltsverzeichnis
glLinkProgramARB
Name
glLinkProgram - linkt die momentan an ein Programmobjekt gebundenen Shader, um daraus einen Satz ausführbarer Shader zu erstellen.
Delphi-Spezifikation
procedure glLinkProgram(programObj GLHandle);
Parameter
programObj | Handle des Programmobjektes das gelinkt werden soll. |
Beschreibung
glLinkProgram linkt die momentan an programObj gebundenen Shader, um daraus einen Satz ausführbarer Shader zu erstellen. Wenn Shaderobjekte vom Typ GL_VERTEX_SHADER an programObj angehangen sind, werden diese genutzt um einen ausführbaren Shader zu erstellen der auf dem programmierbaren Vertexprozessor abläuft. Sind Shaderobjekte vom Typ GL_FRAGMENT_SHADER an programObj angehangen, so werden diese genutzt um den ausführbaren Shader zu erstellen der auf dem programmierbaren Fragmentprozessor läuft.
Der Status des Linkvorgangs wird dabei als Teil des Objektstatus von programObj abgelegt, und ist GL_TRUE, wenn das Programmobjekt ohne Fehler gelinkt wurde, bzw. GL_FALSE, wenn dies nicht der Fall war. Abgefragt kann dieser Status über den Befehl glGetProgram mit den Argumenten programObj und GL_LINK_STATUS werden.
Als Ergebnis eines erfolgreichen Linkvorganges, werden alle dem Programm zugehörigen (aktiven) Uniformvariablen auf 0 gesetzt und alle aktiven Uniformwerte des Programmobjektes werden an einen Platz, gebunden dessen Status mittels glGetUniformLocation angefragt werden kann. Weiterhin werden zu diesem Zeitpunkt alle nutzerdefinierten Attributvariablen die noch nicht an einen generischen Vertex-Attribut-Index gebunden wurden, an einen solchen gebunden.
Das Linken eines Programmobjektes kann aus einer Vielzahl von Gründen fehlschlagen, die in der Sprachdefinition zur OpenGL-Shadersprache erläutert werden. Dinge die einen Fehler beim Linken verursachen können :
- Die Anzahl der von der Implementation zur Verfügung gestellten Attributvariablen wurde überschritten.
- Die Anzahl der von der Implementation zur Verfügung gestellten Uniformvariablen wurde überschritten.
- Der Speicherplatz für Uniformvariablen wurde überschritten.
- Die Anzahl der von der Implementation angebotenen Sampler wurde überschritten.
- Der Haupt-Funktionskörper(main) fehlt bei Vertex- oder Fragmentshader.
- Die Liste der im Vertexshader festgelegten Varying-Variablen unterscheidet sich von der im Fragmentshader.
- Referenzen auf nicht-definierte Funktionen oder Variablen.
- Eine verteilte globale Variable (shared global) wurde mit unterschiedlichen Typen oder Vorgabewerten deklariert.
- Das binden einer generischen Attribut Matrix führt dazu, dass einige Zeilen der Matrix das durch GL_MAX_VERTEX_ATTRIBS vorgegeben Maximum überschreiten.
- Einer oder mehrere der angehängte(n) Shader wurde nicht erfolgreich kompiliert.
- Es wurden nicht genug aufeinanderfolgende Vertex-Attribut-Slots gefunden um Attributmatrizen zu binden.
Sobald ein Programmobjekt erfolgreich gelinkt wurde, können die in ihm enthaltenen, nun ausführbaren Shader, als Teil des aktuellen Renderstatuses via glUseProgram aktiviert werden. Ob der Linkvorgang erfolgreich war, und Informationen zu diesem Vorgang können über glGetProgramInfoLog aus dem Informationslog des Programmobjektes entnommen werden.
glLinkProgramARB wird nach einem erfolgreichen Linkvorgang die ausführbaren Shader als Teil des aktuellen Renderstatuses installieren, sofern das Programmobjekt bereits als aktuelles gesetzt wurde (über glUseProgram).
Wenn ein Programm Shader vom Typ GL_VERTEX_SHADER_ARB beinhaltet, aber keinen Shader vom Typ GL_FRAGMENT_SHADER_ARB, wird der Vertexshader gegen das Interface für die feste Fragmentberechnung gelinkt. Entsprechend wird ein Fragmentshader gegen das Interface für die feste Vertexberechnung gelinkt, wenn Shader vom Typ GL_FRAGMENT_SHADER_ARB, aber keiner vom Typ GL_VERTEX_PROGRAM_ARB enthalten ist.
Das Informationslog des Programmobjektes wird aktualisiert, und der Satz ausführbarer Shader wird generiert, sobald der Linkvorgang ausgeführt wird. Nach dem Linken steht es der Anwendung offen, nicht mehr benötigte Shaderobjekte zu modifizieren oder zu löschen. Keine dieser Operationen werden dann die bereits kompilierten Shader des Programmobjektes verändern.
Hinweise
glLinkProgram ist erst ab OpenGL Version 2.0 verfügbar. (Frühere Versionen können glLinkProgramARB enthalten.)
War das Linken erfolgreich gehen alle Linkinformationen zu einem vorhergehenden Linkversuch verloren (werden überschrieben). Das bedeutet z.B. das ein fehlgeschlagener Versuch nicht den alten Status von programObj wiederherstellt. Es können aber selbst dann noch einige Informationen von programObj ausgelesen werden. Siehe dazu glGetActiveAttrib und glGetActiveUniform.
Fehlermeldungen
GL_INVALID_VALUE wird generiert wenn programOjb kein gültiges Objekthandle ist.
GL_INVALID_OPERATION wird generiert wenn programObj nicht vom Typ GL_PROGRAM_OBJECT ist.
GL_INVALID_OPERATION wird generiert wenn glLinkProgram zwischen einem glBegin und dem passenden glEnd aufgerufen wird.
Zugehörige Wertrückgaben
glGet mit dem Token GL_CURRENT_PROGRAM.
glGetActiveAttrib mit dem Argument programObj und dem Index einer aktiven Attributvariable.
glGetActiveUniform mit dem Argument programObj und dem Index einer aktiven Uniformvariable.
glGetAttachedShaders mit dem Argument programObj.
glGetAttribLocation mit dem Argument programObj und dem Namen einer Attributvariable.
glGetProgram mit den Argumenten programObj und GL_LINK_STATUS.
glGetProgramInfoLog mit den Argumenten programObj
glGetUniform mit dem Argument programObj und dem Platz(Location) einer Uniformvariable.
glGetUniformLocation mit dem Argument programObj und dem Namen einer Uniformvariable.
Siehe auch
glAttachShader, glBindAttribLocation, glCompileShader, glCreateProgram, glDeleteProgram, glDetachShader, glUniform, glUseProgram, glValidateProgram
Hintergrundwissen : Shader
Englische Orginalversion (Copyright 3DLabs Inc.)