Added subtractive and multiplicative blend modes (thanks vrld)

This commit is contained in:
Bart van Strien
2010-08-28 17:27:35 +02:00
parent 4bfd5a905b
commit 9ba06d65f6
3 changed files with 34 additions and 21 deletions
+2
View File
@@ -109,6 +109,8 @@ namespace graphics
{ {
{ "alpha", Graphics::BLEND_ALPHA }, { "alpha", Graphics::BLEND_ALPHA },
{ "additive", Graphics::BLEND_ADDITIVE }, { "additive", Graphics::BLEND_ADDITIVE },
{ "subtractive", Graphics::BLEND_SUBTRACTIVE },
{ "multiplicative", Graphics::BLEND_MULTIPLICATIVE },
}; };
StringMap<Graphics::BlendMode, Graphics::BLEND_MAX_ENUM> Graphics::blendModes(Graphics::blendModeEntries, sizeof(Graphics::blendModeEntries)); StringMap<Graphics::BlendMode, Graphics::BLEND_MAX_ENUM> Graphics::blendModes(Graphics::blendModeEntries, sizeof(Graphics::blendModeEntries));
+2
View File
@@ -52,6 +52,8 @@ namespace graphics
{ {
BLEND_ALPHA = 1, BLEND_ALPHA = 1,
BLEND_ADDITIVE, BLEND_ADDITIVE,
BLEND_SUBTRACTIVE,
BLEND_MULTIPLICATIVE,
BLEND_MAX_ENUM BLEND_MAX_ENUM
}; };
+12 -3
View File
@@ -533,10 +533,19 @@ namespace opengl
void Graphics::setBlendMode( Graphics::BlendMode mode ) void Graphics::setBlendMode( Graphics::BlendMode mode )
{ {
if(mode == BLEND_ADDITIVE) glAlphaFunc(GL_GEQUAL, 0);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
else // mode == BLEND_ALPHA if (mode == BLEND_SUBTRACTIVE)
glBlendEquation(GL_FUNC_REVERSE_SUBTRACT);
else
glBlendEquation(GL_FUNC_ADD);
if (mode == BLEND_ALPHA)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
else if (mode == BLEND_MULTIPLICATIVE)
glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA);
else
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
} }
void Graphics::setColorMode ( Graphics::ColorMode mode ) void Graphics::setColorMode ( Graphics::ColorMode mode )