![]() |
![]() |
OpenGL Shading Language Tutorials |
Loading, Compiling and Linking OGLSL Programs |
void main(void)
{
vec4 a = gl_Vertex;
a.x = a.x * 0.5;
a.y = a.y * 0.5;
gl_Position = gl_ModelViewProjectionMatrix * a; } |
Fragment Shader
We set every fragment to green! Output color (gl_FragColor) is a vector with r,g,b,a components.
void main (void)
{
gl_FragColor = vec4 (0.0, 1.0, 0.0, 1.0);
} |
I wrote 4 classes to simplify managing OpenGL Extensions, loading, compiling and linking shader programs. In this and in future tutorials we can concentrate on OGLSL programs and not on C, C++ code to actually load and compile programs.
aShaderManager is a class to simplify loading and compiling shader programs. The idea is to reduce this process to 1-2 statements: The following code example draws a solid sphere using a OGLSL vertex and fragment program:
// globals: aShaderManager shadermanager; aShaderObject* shader; // init:
shader = shadermanager.loadfromFile("test.vert","test.frag");
//draw:
shader->begin()
glutSolidSphere(1.0,32,32);
shader->end();
|
The ShaderManager has the following methods:
aShaderObject* loadfromFile(char* vertexFile, char* fragmentFile); // load vertex/fragment shader from file |
loadFromFile: loads shader source code from file, compiles, links and returns a shader object.
loadfromMemory: instead of using files you can specify memory addresses containing a null terminated char array of the program string.
free: if you don't need a shader anymore you can free it. Usually this function isn't needed, the destructor of the ShaderManager frees memory.
We will learn more about the aShaderObject class in future tutorials.
If you want to do define advanced shader objects that need to be linked together the process is a bit more. You can go ahead to to Tutorial 2 this part isn't really important for most users.
You want to see the advanced method of creating shader objects with custom compiler error messages etc ? continue here
|
© 2004 by Martin Christen. All Rights Reserved. |