2

我正在尝试使用带有以下代码的 glTexImage2D 加载 2 通道无符号字符纹理(使用 NDK,但我认为这不会有太大的不同):

glTexImage2D(GL_TEXTURE_2D, 0, GL_RG32F, width >> 1, height >> 1, 0, GL_RG, GL_UNSIGNED_BYTE, textureData);

这适用于至少可以追溯到 Android 19 (KitKat) 的许多不同的 Android 设备。但是在带有 Snapdragon 内核(例如 Nexus 6P)的设备上,调用失败并且错误是 GL 错误 0x502 (GL_INVALID_OPERATION)。

我在网上找到了 Qualcomm Adreno OpenGL ES 开发人员指南,它说 GL_RG32F 是受支持的内部格式。我还尝试了各种其他内部格式,都具有相似的失败级别。

我还对内部格式和格式参数使用 GL_LUMINANCE 进行了测试,并且我能够成功加载纹理而无需进行其他更改(在这种情况下,明显的问题是丢失了一半的纹理数据)。

我想避免在 CPU 上分离这些纹理数据并将其作为两个单独的纹理加载,但我正在努力想出一种方法来避免这种情况。

我在这里遗漏了一些明显的东西吗?或者 GL_RG 不是我可以在这些设备上使用的东西?

4

1 回答 1

0

所以在我的例子中,结果证明我需要使用 GL_RG8 作为内部格式而不是 GL_RG32F。一旦我进行了更改,GL_INVALID_OPERATION 错误就消失了,设备开始按预期运行。

于 2016-01-14T06:00:15.567 回答