Opengl 正确创建多采样纹理

Opengl 正确创建多采样纹理,opengl,textures,Opengl,Textures,对于标准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

对于标准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_无效_枚举错误。多采样纹理目标不支持采样器状态


我不知道这是什么意思。请注意,多采样纹理仅支持最近过滤。我要具体说明这一点。我注意到,对于一些调用(特别是
glTexParameterf(…)
),文档中没有列出
GL_纹理_2D_多样本
(如果它们实际上是无效的,而不是被遗忘的,这确实可以解释无效枚举错误)。但是,如果它不被接受,那么我应该如何设置最近过滤?

您不需要设置最近过滤,因为多采样纹理根本不被过滤。(第8.10节)确实将
GL\u纹理\u 2D\u多样本
列为
glTexParameteri
的有效目标(对于整数参数,您应该使用它而不是
glTexParameterf
),但列出了可能的错误:

如果目标是纹理\u 2D\u多重采样,则生成无效的\u枚举错误 或纹理\u 2D\u多采样\u数组,pname是任何采样器 表23.18中的状态


我没有使用多采样纹理,但我的理解是,因为只支持最近过滤,所以不需要设置它。您的代码在没有调用
glTexParameterf
的情况下工作吗?它工作。如果你能找到一个来源,发布为答案,我会接受。