2

ステンシル バッファ機能を使用しようとすると、Android デバイスで非常に奇妙な動作が発生します。(GLES20.glEnable(GLES20.GL_STENCIL_TEST);)

ここに私のコードがあります:

GLES20.glEnable(GLES20.GL_STENCIL_TEST);
GLES20.glStencilFunc(GLES20.GL_GEQUAL, 1, 0xff);
GLES20.glStencilOp(GLES20.GL_KEEP, GLES20.GL_INCR, GLES20.GL_INCR);
GLES20.glStencilMask(0xff);

m_index_buffer.position(start_index);
GLES20.glDrawElements(GLES20.GL_TRIANGLE_STRIP,
                      n_indicies,
                      GLES20.GL_UNSIGNED_SHORT,
                      m_index_buffer);

GLES20.glDisable(GLES20.GL_STENCIL_TEST);

次の結果が得られました。 私のコードの結果

最初は自分のコードを疑っていたので、 Google stencil testからステンシルの例を試してみ たところ、次の結果が得られました。

私のデバイスでの Google のステンシル テストの結果

opengl とステンシル バッファ機能に問題があるようです... Android 4.4.4 で Motorola Moto G を使用しています。これはある種の既知のバグですか?回避策はありますか?

4

1 に答える 1

2

問題は、ステンシル バッファが正しくクリアされなかったことです。ステンシル バッファのすべてのビットをクリアするにはglStencilMask(0xff)、呼び出す前にステンシル マスクを設定する必要があります。glClear(GL_STENCIL_BUFFER_BIT)一部のデバイスは、ステンシル マスクを無視し、ステンシル バッファーをクリアするときに常に 0xff を使用する場合があります。Googleのステンシルテストの例でさえ、このバグがあります:(

于 2015-03-19T12:36:46.450 に答える