可以在着色器中找到纹理的内部格式吗?

Possible to find internal format of texture in shader?

是否可以在着色器 (glsl) 中找到纹理的内部格式?

例如,如果我有一个格式为 GL_RG 的纹理,是否可以在着色器中识别出蓝色和 alpha 值是 "constant" 并且可以忽略?

我知道我可以使用制服将纹理类型从 C++ 传递到着色器。但是有没有一种 "intrinsic" 方法可以从着色器中找到答案?

不,我认为没有任何东西可以直接为您提供此信息。

查看最新的 GLSL 规范(此时为 4.50),我希望一个假设的函数可以在第 158 页开始的“8.9.1.纹理查询函数”部分中列出此信息。但唯一的列出的函数有:

  • textureSize: 获取纹理大小。
  • textureQueryLod: 获取用于给定纹理坐标的细节级别。
  • textureQueryLevels:获取纹理中的mipmap层数。
  • textureSamples: 获取多重采样纹理的采样数。

所以除非我错过了完全不同的东西,否则你要找的东西不存在。