7
votes

Obtenir le tampon de pochoir OpenGL-ES

Avec le tampon de pochoir à OpenGL-es pour Android, j'essaie simplement de masquer une partie de dessin de l'écran. Je pense que je l'ai installé, mais il ne masque pas les pièces non pochées. Vous trouverez ci-dessous une extraction de code pour ce que je fais.

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);


2 commentaires

Votre configuration de contexte Avez-vous des bandes tampon de pochoir ?


Ce ne est pas. Merci, je pensais que c'était une fonctionnalité OpenGL requise. Semble comme si ce n'est pas le cas.


4 Réponses :


4
votes

La raison a fini par être que je n'avais pas défini correctement mon eglconfig pour prendre en charge le tampon de pochoir.


0 commentaires

5
votes

Vous devez définir le stencillage à l'aide de SeeglConfigchooser. Notez que différents téléphones ont des surfaces différentes qui peuvent ne pas prendre en charge ou non.

Par exemple: P>

    // 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);


1 commentaires

Étrange. Pourquoi n'ai-je pas remarqué cette réponse plus tôt? Quoi qu'il en soit, j'avais exactement la même question et j'ai répondu de la même manière :-)



2
votes

Vous devez demander explicitement le tampon de pochoir avec glsurfaceview.seteglconfigchooser : xxx

Les numéros sont rouges, verts, bleu, alpha, profondeur, bits de pochoir. RGB565 avec une profondeur de 16 bits et un pochoir 8 bits est le minimum supporté par chaque périphérique Android capable EGL.


1 commentaires

+1 Ce sont les profondeurs de bits supportés minimum pour les tampons de rendu, mais avez-vous trouvé une documentation indiquant qu'il s'agit également des profondeurs minimales de bits pour les surfaces de fenêtre?



0
votes

Cette réponse est republiée du lien indiqué ci-dessous. Ceci corrige un bogue OPENGL ES2.0 dans un échantillon pour moi.

"Il est nécessaire de définir le masque de pochoir GLSTENDENCORDMASK (0xFF) avant d'appeler GLCLEAR (GL_STENDILY_BUFFER_BIT) pour effacer tous les bits de tampon de pochoir."

tampon de pochoir Android OpenGL 2.0 ne fonctionne pas


0 commentaires