我试图用着色器模仿OpenGL glTexEnv的行为。这是相当复杂的功能,但应该是可行的。唯一的问题是该功能的工作方式不同,具体取决于纹理基础内部格式。如何从纹理中获取信息?纹理基本内部格式是用glTexImage2D函数给出的,所以我必须将它保存到某个变量并根据绑定纹理将其传递给具有一些统一的着色器,或者我可以用OpenGL以某种方式获取它吗?
答案 0 :(得分:0)
纹理混合值似乎不是内置制服的一部分。
http://www.opengl.org/sdk/libs/OpenSceneGraph/glsl_quickref.pdf
通常有两种模仿FFP行为的方法:
我更喜欢第二种方式,因为它不会导致一个大而慢的全局着色器。 而不是那样,你得到小的特定着色器。
此外:这个常见问题被称为“组合着色器爆炸”问题。
答案 1 :(得分:0)
不,纹理基础内部格式不能直接用于着色器。如果您不想自己存储它,您可以随时询问GL其值以将其传递给着色器。
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &outFormat)`