Adding TILE_BLEND_SUBTRACT flag for subtract blend mode using drawTiles.

This commit is contained in:
Ben Morris
2015-02-18 09:29:25 -08:00
parent 76f80b71e0
commit 4eeab6a305
5 changed files with 18 additions and 0 deletions

View File

@@ -263,6 +263,7 @@ enum PathCommand
pcBlendModeAdd = 0x20,
pcBlendModeMultiply = 0x21,
pcBlendModeScreen = 0x22,
pcBlendModeSubtract = 0x23,
};
enum WindingRule { wrOddEven, wrNonZero };

View File

@@ -2792,6 +2792,7 @@ value nme_gfx_draw_tiles(value inGfx,value inSheet, value inXYIDs,value inFlags,
TILE_BLEND_ADD = 0x10000,
TILE_BLEND_MULTIPLY = 0x20000,
TILE_BLEND_SCREEN = 0x40000,
TILE_BLEND_SUBTRACT = 0x80000,
TILE_BLEND_MASK = 0xf0000,
};
@@ -2808,6 +2809,9 @@ value nme_gfx_draw_tiles(value inGfx,value inSheet, value inXYIDs,value inFlags,
case TILE_BLEND_SCREEN:
blend = bmScreen;
break;
case TILE_BLEND_SUBTRACT:
blend = bmSubtract;
break;
}
bool smooth = flags & TILE_SMOOTH;

View File

@@ -51,6 +51,9 @@ void GraphicsPath::elementBlendMode(int inMode)
case bmScreen:
commands.push_back(pcBlendModeScreen);
break;
case bmSubtract:
commands.push_back(pcBlendModeSubtract);
break;
}
}

View File

@@ -216,6 +216,8 @@ public:
mElement.mBlendMode = bmMultiply;
else if (cmd[i] == pcBlendModeScreen)
mElement.mBlendMode = bmScreen;
else if (cmd[i] == pcBlendModeSubtract)
mElement.mBlendMode = bmSubtract;
}
if (has_colour)

View File

@@ -481,15 +481,23 @@ public:
{
case bmAdd:
glBlendFunc( GL_SRC_ALPHA, GL_ONE );
glBlendEquation( GL_FUNC_ADD);
break;
case bmMultiply:
glBlendFunc( GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA);
glBlendEquation( GL_FUNC_ADD);
break;
case bmScreen:
glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_COLOR);
glBlendEquation( GL_FUNC_ADD);
break;
case bmSubtract:
glBlendFunc( GL_SRC_ALPHA, GL_ONE);
glBlendEquation( GL_FUNC_REVERSE_SUBTRACT);
break;
default:
glBlendFunc(premAlpha ? GL_ONE : GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glBlendEquation( GL_FUNC_ADD);
}