next up previous contents
Next: Binden von GLSL Shadern Up: GLSL Previous: Variablen   Contents

Praxis: Linken von GLSL Programmen

Im Gegensatz zu ARB Programs müssen die Handles von GLSL Shadern nach dem kompilieren gelinkt werden, und zwar zu einem weiteren GLhandleARB, dem eigentlichen Programm welches dann auf der Grafikkarte ausgeführt werden kann. Dies geschieht in einer eigenen Funktion - linkShaders - welche nach dem Laden der Shader aufgerufen wird:


\begin{lstlisting}[name=shader.cpp - linkShaders]
// genarate shader program han...
...SHandle);
printInfoLog(AFSHandle);
printInfoLog(ShaderHandle);
\end{lstlisting}

Sobald festgestellt wurde dass zumindest ein GLSL Shader geladen wurde wird - diesmal mittels glCreateProgramObjectARB ein Handle erstellt, an welches mit der Funktion glAttachObjectARB die jeweiligen Shader gebunden werden. Schließlich wird mit glLinkProgramARB das Programm erzeugt. Anschließend wird mit der Funktion printInfoLog zu jedem Handle das so genannte Info Log ausgegeben:


\begin{lstlisting}[name=shader.cpp - printInfoLog]
void printInfoLog(GLhandleARB...
...or '' « obj);
printf(''%s\n'',infoLog);
free(infoLog);
}
}
\end{lstlisting}

Hier wird mittels der Funktion glGetObjectParameterivARB zum übergebenen Handle die Länge des entstandenen Info Logs ermittelt. Dann wird Speicher dafür reserviert und das Log mit glGetInfoLogARB in diesen geschrieben. Nachdem das Log ausgegeben wurde wird der reservierte Speicher wieder freigegeben.



2005-10-25 Michael Bayer - nightspawn.com