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

时间:2013-02-20 11:42:26

标签: opengl glsl

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

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

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

或者我应该采取另一种方式来解决这个问题?

1 个答案:

答案 0 :(得分:18)

“GL_TEXTURE_2D处于活动状态”或“GL_TEXTURE_2D已设置”,您的意思并不十分清楚。

请注意以下事项:

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

你应该采取另一种方式吗?我想是这样的:不是在着色器内做出决定,只需绑定一个1x1像素的“白色”纹理,然后无条件地对该纹理进行采样,并将结果乘以 color ,这显然会返回{{1} }。这也将更加便携和快捷。