着色器程序只在安装期间生效。只有在安装程序期间进行的绘制调用才会使用该着色器。您必须安装着色器、绘制对象,然后卸载着色器。 编辑:通过“安装”着色器,我是指使用你的着色器句柄glUseProgram。而所谓的“卸载”是指安装另一个着色器或使用参数为0的glUseProgram函数。请参见glUseProgram。我的“安装/卸载”术语来自此处。
在你的绘制调用中,使用该着色器绘制该对象,而不使用它来绘制其他对象...没有比这更简单的了;P 你可以在对象类中使用枚举来指定启用该对象的着色器,并仅在应该通过该着色器传递它们时才通过它们...当然,如果它是全屏像素着色器,那么你会遇到麻烦,因为它处理每个像素并渲染一个新的图像以显示。除非你有一种将对象作为参数传递并仅在该对象位置应用更改的算法。
glUseProgram
的文档。我编辑了我的回复以澄清。 - Mike DanielsglUseProgram(0)
是“卸载”着色器的正确方法。 - Xavier Ho