Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
着色器的OpenGL纹理库内部格式_Opengl_Shader - Fatal编程技术网

着色器的OpenGL纹理库内部格式

着色器的OpenGL纹理库内部格式,opengl,shader,Opengl,Shader,我试图用着色器模拟OpenGL glTexEnv的行为。这是一个相当复杂的函数,但应该是可行的。唯一的问题是,该函数根据纹理基础内部格式的不同而工作。如何从纹理中获取这些信息?纹理基础内部格式是通过GLTEXAGE2D函数提供的,因此我必须将其保存到某个变量中,并根据绑定纹理将其传递给具有某种一致性的着色器,还是可以通过OpenGL以某种方式获得它?似乎纹理混合值不是内置一致性的一部分 通常有两种方法来模拟FFP行为: 一个大的着色器,将值传递给着色器。。。 例如,根据需要动态地为每个行为和内部

我试图用着色器模拟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位。现在,如果着色器需要至少两个通道(如红色和绿色),则在提供单通道纹理时可能会遇到问题。