根据您要实现的目标以及您当前的知识,您可以采取不同的方法.
如果你在学习GLSL的同时学习OpenGL 2.0,我建议将Red book和Orange书作为一套,因为它们是相辅相成的.
如果您想要一本不太全面的指南,只需要开始,请查看OpenGL圣经.
如果我误解了你的问题并且你已经了解OpenGL,并且想要更多地了解GLSL,那么这里有一个很好的phong着色示例,它展示了基础知识.
编译着色器源非常简单,
首先,您需要为源分配着色器槽,就像分配纹理一样,使用glCreateShader:
GLuint vtxShader = glCreateShader(GL_VERTEX_SHADER);
GLuint pxlShader = glCreateShader(GL_FRAGMENT_SHADER);
Run Code Online (Sandbox Code Playgroud)
之后,您需要以某种方式加载源代码.由于这实际上是一个平台相关的解决方案,这取决于您.
获取源后,使用glShaderSource以下命令设置:
glShaderSource(vtxShader, 1, &vsSource, 0);
glShaderSource(pxlShader, 1, &psSource, 0);
Run Code Online (Sandbox Code Playgroud)
然后用glCompileShader以下代码编译源代码:
glCompileShader(vtxShader);
glCompileShader(pxlShader);
Run Code Online (Sandbox Code Playgroud)
将着色器相互链接,首先使用分配程序,使用glCreateProgram着色器附加到程序中glAttachShader,并使用glLinkProgram以下方法链接它们:
GLuint shaderId = glCreateProgram();
glAttachShader(shaderId, vtxShader);
glAttachShader(shaderId, pxlShader);
glLinkProgram(shaderId);
Run Code Online (Sandbox Code Playgroud)
然后,就像纹理一样,使用以下方法将其绑定到当前渲染阶段glUseProgram:
glUseProgram(shaderId);
Run Code Online (Sandbox Code Playgroud)
要解除绑定,请使用id为0或其他着色器ID.
清理:
glDetachShader(shaderId, vtxShader);
glDetachShader(shaderId, pxlShader);
glDeleteShader(vtxShader);
glDeleteShader(pxlShader);
glDeleteProgram(shaderId);
Run Code Online (Sandbox Code Playgroud)
这主要是它的一切,你可以使用glUniform函数系列glGetUniform来设置参数.