GLSL与openGL2设置问题

时间:2009-11-16 04:35:06

标签: opengl

我正在尝试将GLSL与openGL 2.0一起使用。

任何人都可以给我一个很好的教程,以便我可以正确设置GLSL。

此致 Zeeshan

1 个答案:

答案 0 :(得分: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);

要取消绑定,请使用id为0或其他着色器ID。

清理:

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

glDeleteShader(vtxShader);
glDeleteShader(pxlShader);

glDeleteProgram(shaderId);

这主要是它的一切,您可以使用glUniform函数系列与glGetUniform一起设置参数。