2009-11-16 25 views

回答

5

取決於你想什麼來實現的,什麼是您當前的知識,你可以採取不同的方法。

如果您在學習GLSL的同時學習OpenGL 2.0,我建議您將Red bookOrange book作爲一個集合,因爲它們並駕齊驅。

如果你需要一個不太全面的指南,只是讓你開始,請查看OpenGL bible

如果我誤解了你的問題,並且你已經知道OpenGL,並且想特別研究GLSL,下面是一個很好的phong shading示例,它顯示了基本知識。

編譯着色器源是非常簡單的,

首先,你需要分配一個着色器插槽爲源,就像你分配一個紋理,使用glCreateShader

GLuint vtxShader = glCreateShader(GL_VERTEX_SHADER); 
GLuint pxlShader = glCreateShader(GL_FRAGMENT_SHADER); 

之後,你需要以某種方式加載您的源代碼。由於這是一個真正依賴於平臺的解決方案,因此這取決於您。

獲取源後,將其設置使用glShaderSource

glShaderSource(vtxShader, 1, &vsSource, 0); 
glShaderSource(pxlShader, 1, &psSource, 0); 

然後你glCompileShader編譯來源:

glCompileShader(vtxShader); 
glCompileShader(pxlShader); 

鏈接着色器給對方,首先分配使用glCreateProgram程序,使用glAttachShader將着色器附加到程序中,並使用glLinkProgram鏈接它們:

GLuint shaderId = glCreateProgram(); 
glAttachShader(shaderId, vtxShader); 
glAttachShader(shaderId, pxlShader); 
glLinkProgram(shaderId); 

然後,就像一個紋理,你把它綁定到使用glUseProgram當前呈現階段:

glUseProgram(shaderId); 

要解除綁定,使用0的ID或其他着色器ID。

對於清理:

glDetachShader(shaderId, vtxShader); 
glDetachShader(shaderId, pxlShader); 

glDeleteShader(vtxShader); 
glDeleteShader(pxlShader); 

glDeleteProgram(shaderId); 

而這大多是一切,你可以一起使用glUniform功能的家庭與glGetUniform設置參數爲好。