Opengl 了解GL_纹理_2D是否在着色器中处于活动状态

Opengl 了解GL_纹理_2D是否在着色器中处于活动状态,opengl,glsl,Opengl,Glsl,我想知道GL_TEXTURE_2D是否在着色器中处于活动状态 我正在将颜色绑定到着色器以及活动纹理(如果设置了GL_texture_2D),并且需要将这两者结合起来 因此,如果纹理已绑定,则混合颜色和纹理(sampler2D*颜色),如果未绑定纹理,则使用颜色 或者我应该换一种方式吗?不太清楚您所说的“GL_纹理_2D处于活动状态”或“GL_纹理_2D已设置”是什么意思 请注意以下事项: glEnable(GL_纹理_2D)对(片段)着色器没有影响。它参数化管道的固定函数部分,您刚才使用片段着

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

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

因此,如果纹理已绑定,则混合颜色和纹理(sampler2D*颜色),如果未绑定纹理,则使用颜色


或者我应该换一种方式吗?

不太清楚您所说的“GL_纹理_2D处于活动状态”或“GL_纹理_2D已设置”是什么意思

请注意以下事项:

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

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

+1白色纹理方法。其他地方列出的唯一解决方案是使用两个不同的着色器,这在大多数情况下毫无意义。默认情况下,opengl会为着色器采样器指定一个值,因此为了工作,您需要检查textureSize是否大于1