OpenGL ES 3.0半浮点(R16F)纹理

时间:2014-12-16 12:35:43

标签: android opengl-es opengl-es-3.0

有人能回答我这行是怎么回事:

GLES30.glTexImage2D(GLES30.GL_TEXTURE_2D, 0,  GLES30.GL_R16F, width, height, 0,  GLES30.GL_RED, GLES30.GL_HALF_FLOAT, myBuffer);

适用于tegra4,但不适用于ARM Mali-T628 MP6吗?

顺便说一下,我没有将它附加到帧缓冲区,我将它用作只读纹理。 ARM上返回的代码是1280,而Tegra并没有抱怨这些代码。一点都不

另外,我知道Tegra4有半浮动纹理的扩展,而且特定的Mali没有扩展,但是因为它的OpenGL ES 3.0,它不应该支持这样的纹理吗?

1 个答案:

答案 0 :(得分:1)

这个电话看起来对我来说完全有效。错误1280是GL_INVALID_ENUM,这表明3个枚举类型参数中的一个无效。但是每一个,以及它们的组合,都符合规范。

最可能的解释是驱动程序错误。我发现有几个ES 3.0驱动程序存在很多问题,因此发现问题并不是一个大惊喜。


以下部分是在假设纹理将用作渲染目标(FBO附件)的情况下编写的。如果您正在寻找问题的直接答案,请忽略。


GL_R16F在标准ES 3.0中无法进行颜色渲染。

如果您提取规格文档(可在www.khronos.org(direct link)上找到),第130-132页的表3.13列出了所有纹理格式及其属性。 R16F 在“颜色可渲染”列中具有复选标记,这意味着它不能用作渲染目标。

相应地,R16F也列在第129-130页的“所需纹理格式”部分的“仅纹理颜色格式”下。

这意味着设备需要EXT_color_buffer_half_float extension才能支持呈现R16F。 ES 3.1中的情况仍然如此。

相关问题