glGenerateMipmap 在特定平台上提高 GL_INVALID_OPERATION

glGenerateMipmap raises GL_INVALID_OPERATION on specific platform

我在用作 FBO 渲染目标的纹理上执行了 glGenerateMipmap(GL_TEXTURE_2D)。它在几台 Windows 计算机上运行良好,但是当我在装有 Intel HD3000 显卡的 Linux 笔记本电脑上测试它时,它会引发 GL_INVALID_OPERATION 错误。

我用AMD CodeXL检查了程序。出现此错误时,GL_TEXTURE_BINDING_2D 具有正确的值,并且有界纹理具有正确的属性:

# of mipmaps: 10 levels;
dimensions: 600x520
internal format: GL_DEPTH_STENCIL;
GL_TEXTURE_MIN_FILTER: GL_LINEAR_MIPMAP_LINEAR.
GL_TEXTURE_MIN_LOD: -1000
GL_TEXTURE_MAX_LOD: 1000
GL_TEXTURE_BASE_LEVEL: 0
GL_TEXTURE_MAX_LEVEL: 1000

您的纹理尺寸不是二次方,请参见https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glGenerateMipmap.xml

Errors

GL_INVALID_OPERATION is generated if either the width or height of the zero level array is not a power of two.

要修复它,请使用二次方纹理,例如。 512x512 等

这似乎是由在 DEPTH24_STENCIL8 纹理上生成 mipmap 引起的。我暂时屏蔽了所有那些深度模板纹理的 mipmap 生成,并消除了所有此类警告。

非 2 的幂纹理大小看起来不是原因,因为我有许多其他相同大小的纹理效果很好。

我知道 Intel HD Graphics Linux 驱动程序有很多限制,例如不支持 #version 150 GLSL。现在我又多了一个限制:)