我正在尝试将GLSL与openGL 2.0一起使用。
任何人都可以给我一个很好的教程,以便我可以正确设置GLSL。
此致 Zeeshan
答案 0 :(得分:5)
根据您想要达到的目标以及您目前的知识,您可以采取不同的方法。
如果您在学习GLSL的同时学习OpenGL 2.0,我建议将Red book和Orange 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
一起设置参数。