Replaced the old stencil API with love.graphics.drawStencil(stencilfunc), love.graphics.setStencilTest(enable, invert), and love.graphics.getStencilTest.

Draw to the stencil buffer (rather than the color buffer) using love.graphics.drawStencil with a function which draws geometry. Once the stencil buffer has been drawn to, use love.graphics.setStencilTest before drawing to let drawn geometry be affected by it.

love.graphics.clear (and Canvas:clear) will clear both the color and stencil buffers by default. love.graphics.clear("stencil") will clear only the stencil buffer.

--HG--
branch : stencil-functions
This commit is contained in:
Alex Szpakowski
2014-08-08 00:25:44 -03:00
parent 53e63d48c9
commit 2b70d84611
7 changed files with 161 additions and 61 deletions
+7 -1
View File
@@ -823,7 +823,7 @@ void Canvas::clear(Color c)
// Don't use the state-shadowed gl.setClearColor because we want to save
// the previous clear color.
glClearColor(glcolor[0], glcolor[1], glcolor[2], glcolor[3]);
glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
if (attachedCanvases.size() > 0)
strategy->setAttachments(attachedCanvases);
@@ -850,6 +850,12 @@ bool Canvas::checkCreateStencil()
bool success = strategy->createStencil(width, height, msaa_samples, depth_stencil);
if (success)
{
// We don't want the stencil buffer filled with garbage.
glClear(GL_STENCIL_BUFFER_BIT);
}
if (current && current != this)
strategy->bindFBO(current->fbo);
else if (!current)