我正在和Glsl一起写一些OpenGl程序。 现在我需要绘制两个对象。两者都有不同的着色器。 通常我认为我应该在draw()方法中做类似的事情:
void draw() {
shaderObjektOne.bind();
glBegin(xxx);
//draw Object one
...
glEnd()
shaderObjektTwo.bind();
glBegin(xxx);
//draw Object two
...
glEnd()
}
如果我这样做,我的屏幕会冻结。 仅为一个对象绑定着色器工作没有问题。 我一直在四处寻找,但我无法找到真正解释为什么会出现这种错误。 是因为渲染目标只能用一个着色器渲染吗? 如何避免使用巨型着色器文件或具有多个渲染目标?
感谢。
编辑: 我想为每个对象分别编译着色器程序。这些将在我绘制对象的顶点之前被绑定。我想避免使用一个大的着色器,我需要设置特定的参数来选择对象的功能。我使用过剩,目前所有的绘图都是在glutSwapBuffers()之前完成的。 '冻结'意味着屏幕上有实际可见的东西(我用最后一个绑定着色器绘制的最后一个对象),但我的输入不再有效。这意味着,我无法移动相机,但程序仍然正常运行(使用调试器测试)。
答案 0 :(得分:0)
知道了。 这是我的程序设计的一个问题。我不小心添加了一个我想绑定的着色器副本。 每当我尝试绑定着色器时,它就会绑定它的副本。
感谢您的帮助:)