Computergrafik
GLSL Anwendungsbeispiel
← GLSL unter OpenGL | ● | Modellierung Standard-Codesequenz →
Hier ein Codebeispiel, wie (triviale) GLSL Shader in OpenGL verwendet werden. Es wird die ModelViewProjection-Matrix mit dem Vertex multipliziert und die gesamte Geometrie rot gezeichnet.
// 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
glActiveProgram (prg);
}
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
glActiveProgram (prg);
}
Hinweis: Wenn der Shader einen Compilerfehler enthalten sollte, so wird der Shader einfach nicht aktiviert.
← GLSL unter OpenGL | ● | Modellierung Standard-Codesequenz →