我必须在 OpenGL 中为不同的对象使用两个不同的着色器程序。
我发现我必须使用 glUseProgram()
来在不同的着色器程序之间切换,但关于它的信息不多。
鉴于我有两个用于不同对象的不同着色器程序,生成和绑定(bind) VAO 和 VBO 如何为每个着色器程序工作(如何以及何时)?
最佳答案
当您在 OpenGL 中渲染对象时,您的代码将如下所示:
用
glUseProgram
绑定(bind)程序,用glUniform4fv
、glUniformMatrix4fv
等设置制服用
glBindVertexArray
绑定(bind)顶点数组。使用
glActiveTexture
和glBindTexture
绑定(bind)您需要的任何纹理。更改任何其他状态,例如,
glEnable
、glDisable
、glBlendFunc
。使用
glDrawArrays
或glDrawElements
绘制。如果需要,可将状态重置为默认值。
这些都是您在原始 OpenGL 3 代码中倾向于做的所有事情。您应该已经让这部分工作了。
如果需要用不同的着色器程序编写多个对象,只需多次执行上述步骤即可。如果您要为多个程序使用相同的状态(制服除外,它为每个程序单独保存),则可以省略状态更改。例如,您可能会使用相同的 VAO、相同的纹理、相同的混合函数等等。
如果您正在寻找更详细的示例,有很多关于 OpenGL 3 绘图命令如何工作的教程。
关于c++ - 在 OpenGL 中使用不同的着色器程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39923583/