2

次のコードで glTexImage2D を使用して 2 チャネルの unsigned char テクスチャをロードしようとしています (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 Developer Guide をオンラインで見つけたところ、GL_RG32F がサポートされている内部形式であると書かれています。また、他のさまざまな内部フォーマットも試しましたが、すべて同様のレベルの失敗がありました。

内部フォーマットとフォーマット パラメータの両方に GL_LUMINANCE を使用してテストしたところ、他に変更を加えることなくテクスチャを正常にロードできました (この場合、テクスチャ データの半分が失われるという明らかな問題があります)。

このテクスチャ データを CPU 上で分離して 2 つの別々のテクスチャとしてロードすることは避けたいのですが、それを回避する方法を考え出すのに苦労しています。

ここで明らかな何かが欠けていますか?それとも、GL_RG はこれらのデバイスで使用できるものではないのでしょうか?

4

1 に答える 1