我必须在OpenGL中为不同的对象使用两个不同的着色器程序.
我发现我必须glUseProgram()在不同的着色器程序之间切换,但没有太多信息.
如果我有两个不同的着色器程序用于不同的对象,那么生成和绑定VAO和VBO如何为每个着色器程序(如何以及何时)工作?
在OpenGL中渲染对象时,代码将如下所示:
绑定程序与glUseProgram,与定制服glUniform4fv,glUniformMatrix4fv等等.
用顶点数组绑定顶点数组glBindVertexArray.
使用glActiveTexture和绑定所需的任何纹理glBindTexture.
更改任何其他国家,例如glEnable,glDisable,glBlendFunc.
用glDrawArrays或绘制glDrawElements.
如果需要,请将状态重置为默认值.
这些都是您在vanilla OpenGL 3代码中所做的所有事情.你应该已经有了这部分工作.
如果需要使用不同的着色器程序编写多个对象,则只需多次执行上述步骤即可.如果要对多个程序使用相同的状态(除了为每个程序单独保存的制服外),可以省略状态更改.例如,您可以使用相同的VAO,相同的纹理,相同的混合函数等等.
如果您正在寻找更详细的示例,有许多关于OpenGL 3绘图命令如何工作的教程.