有人能回答我这行是怎么回事:
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,它不应该支持这样的纹理吗?
答案 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中的情况仍然如此。