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。现在我又多了一个限制:)
我在用作 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。现在我又多了一个限制:)