2009-11-16 43 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设置参数为好。