正确创建多重采样纹理

时间:2014-03-27 04:13:16

标签: 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);
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不是文档中列出的输入(如果它们实际上无效,它确实会解释无效的枚举错误,而不仅仅是忘记了)。但是,如果不被接受,那我该如何设置最接近的过滤?

1 个答案:

答案 0 :(得分:3)

您不需要设置最近的过滤,因为根本不会过滤多重采样纹理。 specification(第8.10节)会将GL_TEXTURE_2D_MULTISAMPLE列为glTexParameteri的有效目标(对于整数参数,您应使用glTexParameterf代替),但列出可能的错误:

  

如果target是TEXTURE_2D_MULTISAMPLE,则会生成INVALID_ENUM错误   或TEXTURE_2D_MULTISAMPLE_ARRAY,pname是任何采样器   表23.18表示。