对于标准 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(...);
Run Code Online (Sandbox Code Playgroud)
这非常有效。我正在尝试制作多重采样纹理(用于 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(...);
Run Code Online (Sandbox Code Playgroud)
我正在使用调试上下文,并且使用此代码,第一次glTexParameterf(...)调用会导致:
生成 GL_INVALID_ENUM 错误。多重采样纹理目标不支持采样器状态
我不知道这是什么意思。请注意,多重采样纹理仅支持最近过滤。我正在指定这一点。我注意到,对于某些调用(特别是glTexParameterf(...)),GL_TEXTURE_2D_MULTISAMPLE不是文档中列出的输入(如果它们实际上无效,而不仅仅是忘记,这确实可以解释无效的枚举错误)。但是,如果不被接受,那么我应该如何设置最近的过滤?