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);
4 Réponses :
La raison a fini par être que je n'avais pas défini correctement mon eglconfig pour prendre en charge le tampon de pochoir. P>
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);
É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 :-)
Vous devez demander explicitement le tampon de pochoir avec 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. P> P> glsurfaceview.seteglconfigchooser code>:
+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?
Cette réponse est republiée du lien indiqué ci-dessous. Ceci corrige un bogue OPENGL ES2.0 dans un échantillon pour moi. P>
"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." P>
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.