0

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

4

2 回答 2

0

不,纹理基础内部格式不能直接用于着色器。如果您不想自己存储它,您可以随时询问 GL 它的值以将其传递给您的着色器。

glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &outFormat)`
于 2009-10-21T20:45:04.460 回答
0

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

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

通常有两种方法可以模仿 FFP 行为:

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

我更喜欢第二种方式,因为它不会产生一个又大又慢的全能着色器。取而代之的是,您会得到小的特定着色器。

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

于 2009-07-21T10:10:04.870 回答