【发布时间】:2013-02-26 06:58:59
【问题描述】:
我想知道 GL_TEXTURE_2D 在着色器中是否处于活动状态。
我正在将颜色绑定到着色器以及活动纹理(如果设置了 GL_TEXTURE_2D)并且需要将这两者结合起来。
所以如果绑定了纹理,则混合颜色和纹理(sampler2D * color),如果没有绑定纹理,则使用颜色。
或者我应该换个方式解决这个问题?
【问题讨论】:
我想知道 GL_TEXTURE_2D 在着色器中是否处于活动状态。
我正在将颜色绑定到着色器以及活动纹理(如果设置了 GL_TEXTURE_2D)并且需要将这两者结合起来。
所以如果绑定了纹理,则混合颜色和纹理(sampler2D * color),如果没有绑定纹理,则使用颜色。
或者我应该换个方式解决这个问题?
【问题讨论】:
您所说的“GL_TEXTURE_2D 处于活动状态”或“GL_TEXTURE_2D 已设置”不是很清楚。
请注意以下几点:
glEnable(GL_TEXTURE_2D) 对您的(片段)着色器没有影响。它将您刚刚使用片段着色器替换的管道的固定功能部分参数化。textureSize(sampler, 0).x > 0 检测与 sampler 关联的有效纹理的存在,但这可能会导致未定义的行为。textureQueryLevels(gsampler2D sampler) 返回 0。你应该换一种方式解决这个问题吗?我是这么认为的:与其在着色器中做出决定,不如简单地绑定一个 1x1 像素的“白色”纹理并无条件地对该纹理进行采样并将结果与 color 相乘,这显然会返回 1.0 * color。这也将更便携、更快。
【讨论】: