使用OpenGL ES 3.0进行RGBA32F纹理格式和mipmapping的问题

时间:2017-06-26 07:00:51

标签: opengl-es textures mipmaps opengl-es-3.0

当我使用glGenerateMipmap()RGBA32F纹理生成mipmap时,总会出现INVALID_OPERATION错误。绑定纹理或设置多种纹理参数不起作用。

从OpenGL ES 3.0规范中,我发现RGBA32F不可过滤。那么这是错误的原因吗?

不幸的是,我在函数glGenerateMipmap的api文档中找不到任何“支持的纹理格式”提示。如果是这样,为什么RGBA16F运行良好,但32位浮点运算不是?

感谢〜

1 个答案:

答案 0 :(得分:1)

来自OpenGL ES 3.0 specification,第3.8.10.5节:

  

如果未使用表3.3中的未实现的内部格式指定了levelbase数组,或者根据表3.13指定了颜色可渲染和纹理可过滤的大小内部格式,则会生成INVALID_OPERATION错误。   (强调添加)

您已经声明RGBA32FRGBA16F时不是纹理可过滤的,这就是为什么它在后一种情况下工作但不在第一种情况下工作的原因。

同样the docs在错误列表中明确提到:

  

如果没有使用未标注的内部格式或可以进行颜色渲染和纹理可过滤的大小内部格式指定levelbaselevelbase数组,则会生成GL_INVALID_OPERATION。