Следующий исходный код содержит все шаги, описанные выше.
Переменные 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