Adding TILE_BLEND_SUBTRACT flag for subtract blend mode using drawTiles.
This commit is contained in:
@@ -263,6 +263,7 @@ enum PathCommand
|
||||
pcBlendModeAdd = 0x20,
|
||||
pcBlendModeMultiply = 0x21,
|
||||
pcBlendModeScreen = 0x22,
|
||||
pcBlendModeSubtract = 0x23,
|
||||
};
|
||||
|
||||
enum WindingRule { wrOddEven, wrNonZero };
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -51,6 +51,9 @@ void GraphicsPath::elementBlendMode(int inMode)
|
||||
case bmScreen:
|
||||
commands.push_back(pcBlendModeScreen);
|
||||
break;
|
||||
case bmSubtract:
|
||||
commands.push_back(pcBlendModeSubtract);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user