1

Android のネイティブ コードから OpenGL ES 1.1 を使用しています。いくつかの場所では、glClipPlanef() を使用していくつかのものを切り取っています。クリッピングのコードは次のとおりです。

GLfloat clip[4] = { 0, -1, 0, 0.2 };
glEnable(GL_CLIP_PLANE0);
glClipPlanef(GL_CLIP_PLANE0, clip);

<draw things>

glDisable(GL_CLIP_PLANE0);

これにより、y 軸上ですべてが上向きに切り取られます。

HTC Gratia (Android 2.2) と Galaxy Nexus (Android 4.3) でテストすると、これは正常に動作します。

しかし、Nexus 4 (Android 4.3) でこれをテストすると、クリッピングが機能しません。そこで機能させるには、方程式のパラメーターを次のように変更する必要があります。

GLfloat clip[4] = { -1, 0, 0, -0.02 };

Nexus 4 のクリッピングでは、X 軸と Y 軸が逆になっているようです。すべての描画は他のデバイスと同じですが、これはクリッピングにのみ影響します。

なぜこれが起こるのか誰か知っていますか?Nexus 4 の Adreno 320 GPU に固有のものですか? デバイスによってクリッピングの動作が異なる場合、すべてのデバイスを適切にサポートするにはどうすればよいですか?

残念ながら、OpenGL ES 2.0 に変更するだけの可能性はありません。プロジェクトのこの時点では作業が多すぎます。これは、Android の OpenGL ES 1.1 エミュレーションの何かでしょうか?

編集: 新しい Nexus 7 (2013 年版) にも同じ誤ったクリッピングの問題があることを確認しました。Adreno 320 GPUも搭載。

4

0 に答える 0