纹理出现奇怪的GLSL错误,为什么运行着色器时会出现无效操作?

时间:2012-02-09 11:50:19

标签: opengl glsl textures

我有一个简单的 GLSL 1.2 着色器,可以累积五个纹理的值。 着色器编译得很好。 我的问题是,当激活此着色器渲染一个简单的三角形时,不会绘制任何内容,glGetError()将返回无效操作。

然而,如果我只使用三个纹理,一切都运行得很好。如果我在渲染三角形之前激活另一个着色器,那么一切都运行良好。

似乎有一些关于纹理和着色器的东西,我似乎不知道,为什么我会因为运行着色器而得到无效操作的任何想法?

更新

  • Nvidia,ATI和软件MESA渲染都会出现问题。
  • 上传纹理,激活纹理,激活着色器,将制服设置为着色器时没有glErrors,渲染一个简单的三角形后会出现gl错误。
  • 仅在片段着色器中接受纹理。

1 个答案:

答案 0 :(得分:1)

可以在着色器中使用有限数量的纹理。

该限制特定于顶点阶段,片段阶段和整体组合限制。

最有可能的是,你超过了这个限制。限制是系统相关的,实际上你必须通过使用glGet例程和以下参数来查询这些限制:

  • 特定着色器阶段的GL_MAX_ {VERTEX | FRAGMENT} _TEXTURE_IMAGE_UNITS
  • 整个着色器程序的GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS

如果多个顶点或片段阶段访问相同的纹理单元,则每个访问将分别计入GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS。