我有一种感觉,这是依赖于驱动程序实现的情况之一,因为 OpenGL 规范中没有描述这种情况。但是,我希望有人知道使用 GL_(LINEAR/NEAREST)_ MIPMAP_* 而不生成 MIP 地图是否会被视为与使用 GL_(LINEAR/NEAREST) 相同?
opengl - 如果未生成 MIP 贴图,是否将 GL_NEAREST_MIPMAP_* 或 GL_LINEAR_MIPMAP_* 用于 GL_TEXTURE_MIN_FILTER 被认为是错误的?
2 回答
定义“没有任何活动的 MIP 纹理”?我不确定你会怎么做,因为没有“mip 纹理”之类的东西(纹理包含mipmap,但 mipmap 不是纹理)。
如果您的意思是您没有创建完整的 mipmap 金字塔,那么这取决于您如何设置GL_TEXTURE_BASE/MAX_LEVEL
s. 如果你正确地使用这些来告诉 OpenGL 你只有一个 mipmap 级别,那么你会没事的。如果您曾经glTexStorage
创建纹理的存储,并且只告诉它创建一个 mipmap,那么您会没事的。
但是如果这些都不适用,那么 OpenGL 会默认使用最不有用的东西(根据它通常的白痴):它将GL_TEXTURE_MAX_LEVEL
级别设置为 1000。这意味着它会期望您已经定义了 mipmap。
根据(桌面)OpenGL,带有 mipmap 过滤的纹理,其中BASE/MAX_LEVEL
s 指的是未定义的 mipmap,这不是“纹理完整”。OpenGL 定义了针对非完整纹理的纹理访问所获得的值是 (0, 0, 0, 1)。
简而言之,BASE/MAX_LEVEL
正确设置您的设备,您就不必担心。总是这样做。
根据我的经验,所有未生成的 mipmap 级别都将默认为黑色。
因此,如果您有一个以 1:1 分辨率显示的纹理,并逐渐缩小,则一旦使用第一个 mipmap,它就会淡出为黑色。
我认为这至少是 NVIDIA 和 AMD 的行为;我从来没有尝试过powervr(因为你提到了opengl-es)。