OpenGL纹理基础内部格式到着色器

问题描述:

我想用着色器模仿OpenGL glTexEnv的行为。这是相当复杂的功能,但应该可行。唯一的问题是该函数根据纹理基本内部格式的不同而工作。我如何从纹理中获取这些信息?纹理基础的内部格式与glTexImage2D函数一起给出,所以我必须将它保存到某个变量中,并根据绑定的纹理将其传递给着色器,或者使用OpenGL以某种方式得到它?OpenGL纹理基础内部格式到着色器

+0

内部格式如何影响着色器? – Luca 2010-04-08 19:54:19

+0

@Luca你可能有一个纹理,例如只有一个通道(假设只有Red值,编码在32位上)。现在,如果着色器至少需要两个通道(例如红色和绿色),则在提供单通道纹理时可能会遇到问题。 – wil 2013-02-28 02:43:27

看来纹理混合值不是内置制服的一部分。

http://www.opengl.org/sdk/libs/OpenSceneGraph/glsl_quickref.pdf

一般有用于模仿的FFP的行为方式有两种:

  1. 一个大的着色器,将值传递给着色器...
  2. 创建着色器,为每个行为和内部格式例如,根据需要动态调整。

我更喜欢第二种方式,因为它不会导致一个大而缓慢的全局着色器。 取而代之的是,你会得到小的特定着色器。

此外:这个常见问题被称为“组合着色器爆炸”问题。

不,纹理基础内部格式不直接用于着色器。如果你不想自己存储它,你可以随时要求GL的价值把它传递给你的着色器。

glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &outFormat)`