找出着色器中GL_TEXTURE_2D是否处于活动状态

Rob*_*ock 12 opengl glsl

我想知道在着色器中GL_TEXTURE_2D是否处于活动状态.

我将颜色绑定到着色器以及活动纹理(如果设置了GL_TEXTURE_2D)并且需要将这两者结合起来.

因此,如果绑定了纹理,请混合颜色和纹理(sampler2D*颜色),如果没有绑定纹理,请使用颜色.

或者我应该采取另一种方式吗?

axx*_*xel 18

由于"GL_TEXTURE_2D处于活动状态"或"GL_TEXTURE_2D已设置",您的意思并不十分清楚.

请注意以下事项:

  • glEnable(GL_TEXTURE_2D)对您的(片段)着色器没有影响.它通过使用片段着色器对您刚刚替换的管道的固定功能部分进行参数化.
  • 从GLSL着色器内部没有"直接"/"干净"的方式来判断是否有与纹理采样器关联的纹理单元绑定的有效纹理(据我所知).
  • 从GLSL 1.3开始,您可能会很幸运textureSize(sampler, 0).x > 0地检测到与采样器关联的有效纹理的存在,但这可能会导致未定义的行为.
  • 如果没有与采样器关联的纹理,ARB_texture_query_levels扩展确实明确声明textureQueryLevels(gsampler2D sampler)返回0 .

你应该采取另一种方式吗?我想是这样的:不是在着色器内做出决定,而是简单地绑定1x1像素纹理的"白色"并无条件地对该纹理进行采样并将结果与颜色相乘,这显然会返回1.0 * color.这也将更加便携和快捷.

  • +1为白色纹理方法.其他地方列出的唯一解决方案是使用两个不同的着色器,在大多数情况下这是毫无意义的. (4认同)