glLinkProgramARB
Inhaltsverzeichnis
glLinkProgramARB
Name
glLinkProgramARB - linkt die momentan an ein Programmobjekt gebundenen Shader, um daraus einen Satz ausführbarer Shader zu erstellen.
Delphi-Spezifikation
procedure glLinkProgramARB(programObj GLhandleARB);
Parameter
programObj | Handle des Programmobjektes das gelinkt werden soll. |
Beschreibung
glLinkProgramARB linkt die momentan an ein Programmobjekt gebundenen Shader, um daraus einen Satz ausführbarer Shader zu erstellen. Wenn ein Shaderobjekt vom Typ GL_VERTEX_SHADER_ARB an das Programmobjekt angehangen ist, wird dieses genutzt um den ausführbaren Shader zu erstellen der auf dem programmierbaren Vertexprozessor abläuft. Ist ein Shaderobjekt vom Typ GL_FRAGMENT_SHADER_ARB an das Programmobjekt angehangen, so wird dieses 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 des Programmobjektes abgelegt, und ist True, wenn das Programmobjekt ohne Fehler gelinkt wird, bzw. False, wenn dies nicht der Fall ist. Abgefragt kann dieser Status über den Befehl glGetObjectParamterARB mit den Argumenten programObj und GL_OBJECT_LINK_STATUS_ARB 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 glGetUniformLocationARB angefragt werden kann. 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.
- Der Speicherplatz für Uniformvariablen wurde aufgebraucht.
- Die Anzahl der von der Implementation angebotenen Sampler wurde überschritten.
- Der Haupt-Funktionskörper(main) fehlt.
- 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 wurde mit unterschiedlichen Typen oder Vorgabewerten deklariert.
- Zwei verschiedene Samplervariablen zeigen auf die gleiche Textureinheit.
- Einer oder mehrere der angehängte(n) Shader wurde nicht erfolgreich kompiliert.
Sobald ein Programmobjekt erfolgreich gelinkt wurde, können die in ihm enthaltenen, nun ausführbaren Shader, als Teil des aktuellen Renderstatuses via glUseProgramObjectARB aktiviert werden. Ob der Linkvorgang erfolgreich war, und Informationen zu diesem Vorgang können über glGetInfoLogARB 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 glUseProgramObjectARB).
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.
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_ARB ist.
GL_INVALID_OPERATION wird generiert wenn glLinkProgramARB zwischen einem glBegin und dem passenden glEnd aufgerufen wird.
Zugehörige Wertrückgaben
glGetActiveAttribARB mit dem Argument programObj.
glGetActiveUniformARB mit dem Argument programObj.
glGetInfoLogARB mit dem Argument programObj.
glGetObjectParameterARB mit den Argumenten programObj und GL_OBJECT_LINK_STATUS_ARB.
glGetUniformARB mit dem Argument programObj und dem Platz einer Uniformvariable.
glGetUniformLocationARB mit dem Argument programObj und dem Namen einer Uniformvariable.
glGetHandleARB mit dem Parameter GL_PROGRAM_OBJECT_ARB.
Siehe auch
glAttachObjectARB, glCompileShaderARB, glDetachObjectARB, glUniformARB, glUseProgramObjectARB, glValidateProgramARB
Hintergrundwissen : Shader
Englische Originalversion (Copyright 3DLabs Inc.)