GLSL을 위한 OpenGL 설정 – 예제
원본 : http://www.lighthouse3d.com/opengl/glsl/index.php?oglexample1
다음 코드는 이전 섹션에서 설명했던 모든 단계를 포함하고 있다. p, f, v는 OpenGL 2.0 문법으로는 GLuint 타입이고 ARB 확장 문법으로는 GLhandleARB 타입인 전역변수이다.
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);
}
OpenGL 2.0의 형태와 ARB 확장 형태에 대한 GLUT를 사용한 완전한 예제는 다음을 통해 다운로드하길 바란다.
위의 코드는 2개의 간단한 쉐이더 코드와 text 파일을 읽는 함수가 포함되어져 있다. 참고로 위의 코드를 실행하면 그 결과는 다음과 같다.
네, 툰 쉐이딩이로군요~ 약간 어슬픈 느낌이긴 하지만 말입니다.