Opengl-glsl多个着色器冻结屏幕



我正在用Glsl编写一个OpenGl小程序。现在我有两个需要画的物体。两者都有不同的着色器。通常我认为我应该在draw()方法中做这样的事情:

void draw() {
    shaderObjektOne.bind();
    glBegin(xxx);
      //draw Object one
      ...
    glEnd()
    shaderObjektTwo.bind();
    glBegin(xxx);
      //draw Object two
      ...
    glEnd()
}

如果我这样做,我的屏幕会冻结。仅为一个对象绑定着色器可以正常工作。我一直在四处寻找,但我找不到真正的解释为什么会出现这个错误。是因为渲染目标只能使用一个着色器进行渲染吗?如何避免巨大的着色器文件或具有多个渲染目标?

谢谢。

编辑:我想为每个对象分别编译着色器程序。在我为对象绘制顶点之前,这些将被绑定。我想避免一个大的着色器,在其中我需要设置特定的参数来选择对象的功能。我使用glut,目前所有绘图都是在glutSwapBuffers()之前完成的。"冻结"意味着屏幕上确实有可见的东西(我用最后一个绑定着色器绘制的最后一个对象),但我的输入不再工作。这意味着,我不能在世界上移动相机,但程序仍然正常运行(用调试器测试)。

明白了。这是我的程序设计的一个问题。我不小心添加了一个要绑定的着色器副本。每次我试图绑定着色器时,它都会绑定它的副本。

感谢你们的帮助:)

最新更新