着色器的OpenGL纹理库内部格式
我试图用着色器模拟OpenGL glTexEnv的行为。这是一个相当复杂的函数,但应该是可行的。唯一的问题是,该函数根据纹理基础内部格式的不同而工作。如何从纹理中获取这些信息?纹理基础内部格式是通过GLTEXAGE2D函数提供的,因此我必须将其保存到某个变量中,并根据绑定纹理将其传递给具有某种一致性的着色器,还是可以通过OpenGL以某种方式获得它?似乎纹理混合值不是内置一致性的一部分 通常有两种方法来模拟FFP行为: 一个大的着色器,将值传递给着色器。。。 例如,根据需要动态地为每个行为和内部格式创建着色器。 我更喜欢第二种方法,因为它不会产生一个大而慢的全能着色器。 取而代之的是,您可以使用小的特定着色器着色器的OpenGL纹理库内部格式,opengl,shader,Opengl,Shader,我试图用着色器模拟OpenGL glTexEnv的行为。这是一个相当复杂的函数,但应该是可行的。唯一的问题是,该函数根据纹理基础内部格式的不同而工作。如何从纹理中获取这些信息?纹理基础内部格式是通过GLTEXAGE2D函数提供的,因此我必须将其保存到某个变量中,并根据绑定纹理将其传递给具有某种一致性的着色器,还是可以通过OpenGL以某种方式获得它?似乎纹理混合值不是内置一致性的一部分 通常有两种方法来模拟FFP行为: 一个大的着色器,将值传递给着色器。。。 例如,根据需要动态地为每个行为和内部
另外:这个常见的问题称为组合着色器爆炸问题 否,纹理基础内部格式不能直接用于着色器。如果您不想自己存储它,则始终可以要求GL将其值传递给着色器
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &outFormat)`
实际上,您/无法/在单个着色器中实现所有内容。假设已为纹理单元0启用纹理\u 3D和纹理\u 2D目标。固定功能规格说明将对3D纹理进行采样。可编程管道表示着色器根据其使用的采样器决定采样内容。这意味着您必须为纹理目标的每个组合构建特定的着色器。1D/2D/3D/cube,具有8个纹理单元,为您提供了64K着色器可能性…内部格式如何影响着色器?@Luca您可能有一个纹理,例如只有一个通道,比如说只有红色值,编码为32位。现在,如果着色器需要至少两个通道(如红色和绿色),则在提供单通道纹理时可能会遇到问题。