对于标准OpenGL纹理,过滤状态是纹理的一部分,必须在创建纹理时定义。这导致代码如下:
glGenTextures(1,&_texture_id);
glBindTexture(GL_TEXTURE_2D,_texture_id);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexImage2D(...);
这完美无缺。我正在尝试制作多重采样纹理(用于FBO)。代码非常相似:
glGenTextures(1,&_texture_id);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE,_texture_id);
glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexImage2DMultisample(...);
我正在使用调试上下文,使用此代码,第一个glTexParameterf(...)
调用会导致:
生成GL_INVALID_ENUM错误。多重采样纹理目标不支持采样器状态
我不知道这是什么意思。请注意,多重采样纹理仅支持最近的过滤。我指的是这个。我注意到对于某些调用(特别是glTexParameterf(...)
),GL_TEXTURE_2D_MULTISAMPLE
不是文档中列出的输入(如果它们实际上无效,它确实会解释无效的枚举错误,而不仅仅是忘记了)。但是,如果不被接受,那我该如何设置最接近的过滤?
答案 0 :(得分:3)
您不需要设置最近的过滤,因为根本不会过滤多重采样纹理。 specification(第8.10节)会将GL_TEXTURE_2D_MULTISAMPLE
列为glTexParameteri
的有效目标(对于整数参数,您应使用glTexParameterf
代替),但列出可能的错误:
如果target是TEXTURE_2D_MULTISAMPLE,则会生成INVALID_ENUM错误 或TEXTURE_2D_MULTISAMPLE_ARRAY,pname是任何采样器 表23.18表示。