Computergrafik
GLSL Anwendungsbeispiel
← GLSL unter OpenGL | ● | Modellierung Standard-Codesequenz →
Hier ein Codebeispiel, wie (triviale) GLSL Shader in OpenGL benutzt werden. Es wird die ModelViewProjection-Matrix mit dem Vertex verknüpft, und alles rot gezeichnet.
Es enthält keinerlei Fehlerabfrage etc., was für Shader-Programmierung essentiell ist. Wenn der Shader einen Compilerfehler enthält, wird der Shader einfach nicht benutzt…
void init ()
{
// Shader source
static const char *vs_src =
"#version 120\n"
"uniform mat4 mvp;\n"
"void main()\n"
"{\n"
" gl_Position = mvp * gl_Vertex;\n"
"}\n";
static const char *fs_src =
"#version 120\n"
"void main()\n"
"{\n"
" gl_FragColor = vec4 (1, 0, 0, 1);\n"
"}\n";
// Erzeuge und compiliere Vertex Shader
GLuint vs = glCreateShader (GL_VERTEX_SHADER);
glShaderSource (vs, 1, &vs_src, NULL);
glCompileShader (vs);
// Erzeuge und compiliere Fragment Shader
GLuint fs = glCreateShader (GL_FRAGMENT_SHADER);
glShaderSource (fs, 1, &fs_src, NULL);
glCompileShader (fs);
// Erzeuge und linke Programm
GLuint prg = glCreateProgram();
glAttachShader (prg, vs);
glAttachShader (prg, fs);
glLinkProgram (prg);
// Aktiviere Programm
// lgl nur, da später lglRender() genutzt wird, was den Shader neu setzt
lglUseProgram (prg);
}
{
// Shader source
static const char *vs_src =
"#version 120\n"
"uniform mat4 mvp;\n"
"void main()\n"
"{\n"
" gl_Position = mvp * gl_Vertex;\n"
"}\n";
static const char *fs_src =
"#version 120\n"
"void main()\n"
"{\n"
" gl_FragColor = vec4 (1, 0, 0, 1);\n"
"}\n";
// Erzeuge und compiliere Vertex Shader
GLuint vs = glCreateShader (GL_VERTEX_SHADER);
glShaderSource (vs, 1, &vs_src, NULL);
glCompileShader (vs);
// Erzeuge und compiliere Fragment Shader
GLuint fs = glCreateShader (GL_FRAGMENT_SHADER);
glShaderSource (fs, 1, &fs_src, NULL);
glCompileShader (fs);
// Erzeuge und linke Programm
GLuint prg = glCreateProgram();
glAttachShader (prg, vs);
glAttachShader (prg, fs);
glLinkProgram (prg);
// Aktiviere Programm
// lgl nur, da später lglRender() genutzt wird, was den Shader neu setzt
lglUseProgram (prg);
}
← GLSL unter OpenGL | ● | Modellierung Standard-Codesequenz →