【问题标题】:glGenerateMipmap raises GL_INVALID_OPERATION on specific platform [closed]glGenerateMipmap 在特定平台上引发 GL_INVALID_OPERATION [关闭]
【发布时间】:2020-03-25 03:33:15
【问题描述】:

我在用作 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

【问题讨论】:

    标签: opengl mipmaps


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      错误

      GL_INVALID_OPERATION 如果宽度或高度 零级数组不是 2 的幂。

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

      【讨论】:

      • 不是那个问题。我在该程序中有许多非 2 次幂纹理。
      • 您正在链接到 OpenGL ES 2.0 文档。此功能的桌面 OpenGL 文档没有此类限制。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      • 2011-09-04
      • 1970-01-01
      相关资源
      最近更新 更多