Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl glsl多着色器冻结屏幕_Opengl_Glsl - Fatal编程技术网

Opengl glsl多着色器冻结屏幕

Opengl glsl多着色器冻结屏幕,opengl,glsl,Opengl,Glsl,我正在用Glsl编写一个小的OpenGl程序。 现在我需要画两个物体。两者都有不同的着色器。 通常我认为我应该在draw()方法中执行类似的操作: 如果我这样做,我的屏幕就会冻结。 仅为一个对象绑定着色器不会出现问题。 我一直在四处寻找,但找不到发生此错误的真正原因。 是否因为渲染目标只能使用一个着色器渲染? 如何避免使用大型着色器文件或使用多个渲染目标 谢谢 编辑: 我想为每个对象分别编译着色器程序。这些将在我为对象绘制顶点之前绑定。我希望避免使用一个大型着色器,在该着色器中,我需要设置特定参

我正在用Glsl编写一个小的OpenGl程序。 现在我需要画两个物体。两者都有不同的着色器。 通常我认为我应该在draw()方法中执行类似的操作:

如果我这样做,我的屏幕就会冻结。 仅为一个对象绑定着色器不会出现问题。 我一直在四处寻找,但找不到发生此错误的真正原因。 是否因为渲染目标只能使用一个着色器渲染? 如何避免使用大型着色器文件或使用多个渲染目标

谢谢

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

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


谢谢你们的帮助:)

你们说的屏幕冻结是什么意思?这些东西画出来了吗?代码是否在某个地方无限循环?(还有,混合着色器和即时模式?@ColonelThirtyTwo:“混合着色器和即时模式”这当然是可能的。这是一段糟糕的代码,但OpenGL喜欢这样的向后兼容性…您能用中间glsl文件将其实现为一个函数吗?然后包括其他功能,但使用参数过滤到所需的功能。基本上,使两个着色器更加模块化。@Mike“避免使用巨型着色器文件”是什么意思?渲染目标始终需要两个着色器。一个用于在纹理上绘制场景,另一个用于绘制实际场景texture@MikeSchweizer:这听起来像是您的着色器未能编译。由于您显然使用传统的上下文或兼容性配置文件,GL将退回到固定的功能管道。根据为着色器设置变换的方式,FFP可能会完全忽略这一点。到目前为止,这个问题肯定不在您所包含的代码部分中。
void draw() {
    shaderObjektOne.bind();
    glBegin(xxx);
      //draw Object one
      ...
    glEnd()
    shaderObjektTwo.bind();
    glBegin(xxx);
      //draw Object two
      ...
    glEnd()
}