Je ne comprends pas pourquoi ces deux codes ne donnent pas le même résultat. J'ai permis le test de profondeur et d'essais au pochoir et ma boucle principale ressemble à ceci:Comportement du tampon stencil dans un cas simple (GL_ALWAYS, GL_LEQUAL)
myShader.Use() // Use shader program
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
// define model, projection, view, ....
glBindVertexArray(VAO[0]);
glStencilMask(0xFF); // Enable stencil buffer writing
glStencilFunc(GL_ALWAYS, 1, 0xFF);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
drawCube(&myShader, model, projection, view);
glBindVertexArray(0);
De toute évidence, mon cube rend dans ce cas.
Cependant, si j'utilise ce code, rien rend du tout:
myShader.Use() // Use shader program
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
// define model, projection, view, ....
glBindVertexArray(VAO[0]);
glStencilMask(0xFF); // Enable stencil buffer writing
glStencilFunc(GL_LEQUAL, 1, 0xFF);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
drawCube(&myShader, model, projection, view);
glBindVertexArray(0);
Avec un seul objet dans ma scène, à la fois le code doit se comporter de la même manière. Pourtant, ce n'est pas le cas.
Je pensais que cela avait quelque chose à voir avec la valeur par défaut dans le tampon stencil. Cependant, depuis que je suis effacer le tampon de pochoir avant de le faire, la valeur par défaut doit être 0.
Par ailleurs, avec ce code, le cube rend ainsi:
myShader.Use() // Use shader program
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
// define model, projection, view, ....
glBindVertexArray(VAO[0]);
glStencilMask(0xFF); // Enable stencil buffer writing
glStencilFunc(GL_LEQUAL, 0, 0xFF);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
drawCube(&myShader, model, projection, view);
glBindVertexArray(0);
Je ne comprendre ce qui se passe.