12

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

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

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

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

4

1 回答 1

19

'GL_TEXTURE_2D 处于活动状态'或'GL_TEXTURE_2D 已设置'的意思还不太清楚。

请注意以下事项:

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

你应该采取另一种方式吗?我是这么认为的:与其在着色器中做出决定,不如简单地绑定一个 1x1 像素的“白色”纹理并无条件地对该纹理进行采样并将结果与​​ color相乘,这显然会返回1.0 * color。这也将更便携、更快。

于 2013-02-20T14:35:53.160 回答