1

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

4

2 回答 2

4

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

如果您的意思是您没有创建完整的 mipmap 金字塔,那么这取决于您如何设置GL_TEXTURE_BASE/MAX_LEVELs. 如果你正确地使用这些来告诉 OpenGL 你只有一个 mipmap 级别,那么你会没事的。如果您曾经glTexStorage创建纹理的存储,并且只告诉它创建一个 mipmap,那么您会没事的。

但是如果这些都不适用,那么 OpenGL 会默认使用最不有用的东西(根据它通常的白痴):它将GL_TEXTURE_MAX_LEVEL级别设置为 1000。这意味着它会期望您已经定义了 mipmap。

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

简而言之,BASE/MAX_LEVEL正确设置您的设备,您就不必担心。总是这样做。

于 2012-10-07T16:25:15.813 回答
1

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

因此,如果您有一个以 1:1 分辨率显示的纹理,并逐渐缩小,则一旦使用第一个 mipmap,它就会淡出为黑色。

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

于 2012-10-07T11:14:53.103 回答