如何将着色器应用于特定对象

3

我的场景中有几个物体。我只想将我的着色器应用于其中一个。环境:OpenGL 2.0,C++,GLUT,GLEW。

2个回答

6

着色器程序只在安装期间生效。只有在安装程序期间进行的绘制调用才会使用该着色器。您必须安装着色器、绘制对象,然后卸载着色器。

编辑:通过“安装”着色器,我是指使用你的着色器句柄glUseProgram。而所谓的“卸载”是指安装另一个着色器或使用参数为0glUseProgram函数。请参见glUseProgram。我的“安装/卸载”术语来自此处。


你在说什么啊?安装?卸载?那么,你对着色器的定义是什么呢? - Jonas B
如何卸载着色器?通过glDetachShader吗?是否有与glUseProgram相反的东西-> glDontUseProgram? - Andrey
1
@Jonas,@Andrey,我的“安装”/“卸载”术语来自于glUseProgram的文档。我编辑了我的回复以澄清。 - Mike Daniels
我相信,glUseProgram(0) 是“卸载”着色器的正确方法。 - Xavier Ho

2
在你的绘制调用中,使用该着色器绘制该对象,而不使用它来绘制其他对象...没有比这更简单的了;P 你可以在对象类中使用枚举来指定启用该对象的着色器,并仅在应该通过该着色器传递它们时才通过它们...当然,如果它是全屏像素着色器,那么你会遇到麻烦,因为它处理每个像素并渲染一个新的图像以显示。除非你有一种将对象作为参数传递并仅在该对象位置应用更改的算法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接