Следующий исходный код содержит все шаги, описанные выше.
Переменные p, f, v обьявлены выше как глобальные, как GLuint для OpenGL 2.0 и GLhandleARB для расширений шейдеров ARB.

Синтаксис OpenGL 2.0:

    void setShaders() {

char *vs,*fs;

v = glCreateShader(GL_VERTEX_SHADER);
f = glCreateShader(GL_FRAGMENT_SHADER);

vs = textFileRead(«toon.vert»);
fs = textFileRead(«toon.frag»);

const char * vv = vs;
const char * ff = fs;

glShaderSource(v, 1, &vv,NULL);
glShaderSource(f, 1, &ff,NULL);

free(vs);free(fs);

glCompileShader(v);
glCompileShader(f);

p = glCreateProgram();

glAttachShader(p,v);
glAttachShader(p,f);

glLinkProgram(p);
glUseProgram(p);
}

 

Синтаксис расширений шейдеров ARB:

    void setShaders() {

char *vs,*fs;

v = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
f = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);

vs = textFileRead(«toon.vert»);
fs = textFileRead(«toon.frag»);

const char * vv = vs;
const char * ff = fs;

glShaderSourceARB(v, 1, &vv,NULL);
glShaderSourceARB(f, 1, &ff,NULL);

free(vs);free(fs);

glCompileShaderARB(v);
glCompileShaderARB(f);

p = glCreateProgramObjectARB();

glAttachObjectARB(p,v);
glAttachObjectARB(p,f);

glLinkProgramARB(p);
glUseProgramObjectARB(p);
}

 

Полный GLUT-пример доступен здесь:
Синтаксис OpenGL 2.0
Синтаксис расширений ARB

Код содержит два простых шейдера и функции чтения текстовых файлов.

Пример кода для *nix (только расширения ARB) доступен здесь благодаря Wojciech Milkowski.

Пожалуйста, дайте ему знать, если вы используете этот код: wmilkowski ‘at’ gazeta.pl