Rename 'defineMask' to 'newMask'. Add inverted mask (issue #226).

This commit is contained in:
vrld
2011-05-30 14:45:33 +02:00
parent eb90e08b0d
commit 30d6968ef9
3 changed files with 20 additions and 7 deletions
+2 -2
View File
@@ -437,9 +437,9 @@ namespace opengl
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
} }
void Graphics::useMask() void Graphics::useMask(bool invert)
{ {
glStencilFunc(GL_EQUAL, 1, 1); glStencilFunc(GL_EQUAL, (int)(!invert), 1); // invert ? 0 : 1
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
} }
+3 -1
View File
@@ -242,8 +242,10 @@ namespace opengl
/** /**
* Set stencil function to mask the following drawing calls using * Set stencil function to mask the following drawing calls using
* the current stencil buffer * the current stencil buffer
* @param invert Invert the mask, i.e. draw everywhere expect where
* the mask is defined.
*/ */
void useMask(); void useMask(bool invert = false);
/** /**
* Disables the stencil buffer * Disables the stencil buffer
+15 -4
View File
@@ -144,7 +144,7 @@ namespace opengl
return instance->getScissor(L); return instance->getScissor(L);
} }
int w_defineMask(lua_State * L) int w_newMask(lua_State * L)
{ {
// just return the function // just return the function
if (!lua_isfunction(L, 1)) if (!lua_isfunction(L, 1))
@@ -153,7 +153,7 @@ namespace opengl
return 1; return 1;
} }
int w_setMask(lua_State * L) static int setMask(lua_State * L, bool invert)
{ {
// no argument -> clear mask // no argument -> clear mask
if (lua_isnoneornil(L, 1)) { if (lua_isnoneornil(L, 1)) {
@@ -166,11 +166,21 @@ namespace opengl
instance->defineMask(); instance->defineMask();
lua_call(L, lua_gettop(L) - 1, 0); // call mask(...) lua_call(L, lua_gettop(L) - 1, 0); // call mask(...)
instance->useMask(); instance->useMask(invert);
return 0; return 0;
} }
int w_setMask(lua_State * L)
{
return setMask(L, false);
}
int w_setInvertedMask(lua_State * L)
{
return setMask(L, true);
}
int w_newImage(lua_State * L) int w_newImage(lua_State * L)
{ {
// Convert to File, if necessary. // Convert to File, if necessary.
@@ -1047,8 +1057,9 @@ namespace opengl
{ "setScissor", w_setScissor }, { "setScissor", w_setScissor },
{ "getScissor", w_getScissor }, { "getScissor", w_getScissor },
{ "defineMask", w_defineMask }, { "newMask", w_newMask },
{ "setMask", w_setMask }, { "setMask", w_setMask },
{ "setInvertedMask", w_setInvertedMask },
{ "point", w_point }, { "point", w_point },
{ "line", w_line }, { "line", w_line },