glTexImage2D在Snapdragon设备上的GL_RG失败

时间:2016-01-14 05:11:21

标签: android opengl-es android-ndk qualcomm

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

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

这在许多不同的Android设备上运行良好,至少可以追溯到Android 19(KitKat)。但是在具有Snapdragon核心(例如Nexus 6P)的设备上,调用失败,错误是GL错误0x502(GL_INVALID_OPERATION)。

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

我还使用GL_LUMINANCE对内部格式和格式参数进行了测试,并且我能够成功加载纹理而没有其他更改(在这种情况下显然缺少一半纹理数据)

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

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

1 个答案:

答案 0 :(得分:0)

所以在我的情况下,事实证明我需要使用GL_RG8作为内部格式而不是GL_RG32F。完成更改后,GL_INVALID_OPERATION错误消失,设备开始按预期执行。