我正在尝试使用带有以下代码的 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 不是我可以在这些设备上使用的东西?