如果尚未生成MIP映射,则GL_TEXTURE_MIN_FILTER使用GL_NEAREST_MIPMAP_ *或GL_LINEAR_MIPMAP_ *被认为是错误的吗?

时间:2012-10-07 10:18:18

标签: opengl opengl-es opengl-es-2.0

我感觉这是依赖于驱动程序实现的情况之一,因为OpenGL规范中没有描述这种情况。但是,我希望有人知道在不生成MIP地图的情况下使用GL_(LINEAR / NEAREST)_ MIPMAP_ *是否与使用GL_(LINEAR / NEAREST)相同?

2 个答案:

答案 0 :(得分:3)

定义“没有任何活动的MIP纹理”?我不确定你会怎么做,因为没有“mip texture”(纹理包含 mipmaps,但mipmaps不是纹理)。

如果您的意思是没有创建完整的mipmap金字塔,那么这取决于您设置GL_TEXTURE_BASE/MAX_LEVEL的方式。如果你正确地使用它们告诉OpenGL你只有一个mipmap级别,那么你会没事的。如果您使用glTexStorage来创建纹理的存储空间,并且只告诉它创建一个mipmap,那么你也可以。

但是,如果这些都不适用,那么OpenGL默认为最不实用的东西(按照惯常的惯用法):它将GL_TEXTURE_MAX_LEVEL级别设置为1000.这意味着它会期望您定义mipmap。 / p>

根据(桌面)OpenGL,具有mipmap过滤的纹理,其中BASE/MAX_LEVEL s引用未定义的mipmap不是“纹理完整”。 OpenGL定义了针对非完整纹理的纹理访问获得的值是(0,0,0,1)。

简而言之,正确设置BASE/MAX_LEVEL,您无需担心。 一直这样做。

答案 1 :(得分:1)

根据我的经验,所有未生成的mipmap级别都将默认为黑色。

因此,如果您以1:1的分辨率显示纹理,并逐渐缩小,则在使用第一个mipmap后,它将逐渐变为黑色。

我认为这至少是对NVIDIA和AMD的行为;我从未尝试过powervr(因为你提到了opengl-es)。