Shader和Program的關係可以從以下程式碼中瞭解,流程邏輯先搞懂,之後的學習就能得心應手!
設定Shaders以OpenGL 2.0 syntax寫法如下,p, v, g, and f是全域變數:
void setShaders() {
char *vs,*gs, *fs;
// Create shader handlers
v = glCreateShader(GL_VERTEX_SHADER);
g = glCreateShader(GL_GEOMETRY_SHADER);
f = glCreateShader(GL_FRAGMENT_SHADER);
// Read source code from files
vs = textFileRead("example.vert");
gs = textFileRead("example.geom");
fs = textFileRead("example.frag");
const char * vv = vs;
const char * gg = gs;
const char * ff = fs;
// Set shader source
glShaderSource(v, 1, &vv,NULL);
glShaderSource(g, 1, &gg,NULL);
glShaderSource(f, 1, &ff,NULL);
free(vs);free(gs);free(fs);
// Compile all shaders
glCompileShader(v);
glCompileShader(g);
glCompileShader(f);
// Create the program
p = glCreateProgram();
// Attach shaders to program
glAttachShader(p,v);
glAttachShader(p,g);
glAttachShader(p,f);
// Link and set program to use
glLinkProgram(p);
glUseProgram(p);
}
參考:GLSL Core Tutorial – Setup、GLSL Tutorial von Lighthouse3D。


Comments on: "[GLSL] Setup Example" (1)
[…] shader和fragment shader溝通,詳情可見Setup Example。若想要直接來寫shader,跳過OpenGL […]
讚讚