7

Android用のopengl-esのステンシルバッファを使用して、画面の描画部分をマスクアウトしようとしています。正しく設定されていると思いますが、ステンシル以外の部分をマスクしているわけではありません。以下は、私が行っていることのコードの抜粋です。

gl.glEnable(GL10.GL_STENCIL_TEST);
gl.glClearStencil(0);
gl.glClear(GL10.GL_STENCIL_BUFFER_BIT);
gl.glColorMask(false, false, false, false);
gl.glDepthMask(false);
gl.glStencilFunc(GL10.GL_ALWAYS, 1, 1);
gl.glStencilOp(GL10.GL_REPLACE, GL10.GL_REPLACE, GL10.GL_REPLACE);

drawMask(); //I have confirmed this draws to the correct location by allowing colour to show. Trust that this draws the mask to the correct location.

gl.glColorMask(true, true, true, true);
gl.glDepthMask(true);
gl.glStencilFunc(GL10.GL_EQUAL, 1, 1);
gl.glStencilOp(GL10.GL_KEEP, GL10.GL_KEEP, GL10.GL_KEEP);

drawItems(); //Draw everything. Only items inside the masked area should be drawn. But everything is drawn with this code...

gl.glDisable(GL10.GL_STENCIL_TEST);

誰かがこれに何か問題を見つけましたか?基本的には、画面の半分(カラーを有効にした場合に機能します)のボックスを描画し、その領域のステンシルバッファを1に設定します。そして最後に、画面全体に描画します。上半分だけに描きたいのですが、すべてを描きます。

前もって感謝します。

4

4 に答える 4

5

setEGLConfigChooserを使用してstencilSizeを設定する必要があります。異なる電話はこれをサポートするかもしれないし、しないかもしれない異なる表面を持っていることに注意してください。

例えば:

    // void android.opengl.GLSurfaceView.setEGLConfigChooser(int redSize, int greenSize, int blueSize, int alphaSize, int depthSize, int stencilSize)
    mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 8);
于 2011-06-15T15:28:49.220 に答える
4

その理由は、ステンシル バッファをサポートするように EGLConfig を適切に設定していなかったためです。

于 2010-07-01T01:35:44.533 に答える
2

次のようにステンシル バッファを明示的に要求する必要がありますGLSurfaceView.setEGLConfigChooser

public class MyActivity extends Activity {
    GLSurfaceView view;
    ...
    onCreate(...
        view.setEGLConfigChooser(5,6,5,0,16,8);
        view.setRenderer(...

数値は、赤、緑、青、アルファ、深度、ステンシル ビットです。16 ビット深度と 8 ビット ステンシルを使用した RGB565 は、各 EGL 対応 Android デバイスでサポートされる最小値です。

于 2012-06-21T00:38:26.310 に答える
0

この回答は、以下に示すリンクから転載されています。これにより、サンプルの OpenGL ES2.0 バグが修正されました。

「ステンシル バッファのすべてのビットをクリアするには、glClear(GL_STENCIL_BUFFER_BIT) を呼び出す前に、ステンシル マスク glStencilMask(0xff) を設定する必要があります。」

Android opengl 2.0ステンシルバッファが機能しない

于 2016-01-18T14:17:58.920 に答える