为什么GL_LINEAR_MIPMAP_LINEAR会出现INVALID_ENUM错误?

use*_*794 9 opengl-es ios

使用XCode 4.4.1我有以下OpenGL代码:

//set the tex params
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
Run Code Online (Sandbox Code Playgroud)

我使用这个片段检查OpenGL错误:

GLenum err = glGetError();//THIS IS LIKE THIS BECAUSE OF AN EARLIER ERROR

if (err != GL_NO_ERROR)
{
    NSLog(@"glError: 0x%04X", i, err);
}
Run Code Online (Sandbox Code Playgroud)

OpenGL代码产生错误(0x500) - 我正在使用OpenGL ES2.0定位iOS 5.0.

为什么这是一个无效的枚举?

Chr*_*ica 24

magnifaction过滤GL_TEXTURE_MAG_FILTER器不支持mip-mapping,因为这对纹理放大没有意义.它只支持GL_NEARESTGL_LINEAR.所以只需将此行更改为

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
Run Code Online (Sandbox Code Playgroud)

  • @aledalgrande 当然它仍然有效。它一直有效,并将永远保持有效。这似乎是一个大胆的声明,但事实并非如此,因为正如所说的放大过滤器完全没有 mipmapping 的概念。当然`GL_LINEAR_MIPMAP_LINEAR`非常有用,但它不用于放大过滤器(`GL_TEXTURE_MAG_FILTER`),而仅用于缩小过滤器(`GL_TEXTURE_MIN_FILTER`)。您的链接似乎没有提到这种差异,但话说回来,无论如何它实际上只是补充材料,不应该完整地解释纹理。 (2认同)