当我使用glGenerateMipmap()
为RGBA32F
纹理生成mipmap时,总会出现INVALID_OPERATION
错误。绑定纹理或设置多种纹理参数不起作用。
从OpenGL ES 3.0规范中,我发现RGBA32F
不可过滤。那么这是错误的原因吗?
不幸的是,我在函数glGenerateMipmap
的api文档中找不到任何“支持的纹理格式”提示。如果是这样,为什么RGBA16F
运行良好,但32位浮点运算不是?
感谢〜
答案 0 :(得分:1)
来自OpenGL ES 3.0 specification,第3.8.10.5节:
如果未使用表3.3中的未实现的内部格式指定了levelbase数组,或者根据表3.13指定了颜色可渲染和纹理可过滤的大小内部格式,则会生成INVALID_OPERATION错误。 (强调添加)
您已经声明RGBA32F
在RGBA16F
时不是纹理可过滤的,这就是为什么它在后一种情况下工作但不在第一种情况下工作的原因。
同样the docs在错误列表中明确提到:
如果没有使用未标注的内部格式或可以进行颜色渲染和纹理可过滤的大小内部格式指定levelbaselevelbase数组,则会生成GL_INVALID_OPERATION。