Layer blend mode

This commit is contained in:
2016-09-29 02:18:35 +07:00
parent f59b207483
commit 5ae09addae
3 changed files with 11 additions and 2 deletions

View File

@@ -4,7 +4,7 @@ namespace FlashTools.Internal.SwfTools.SwfTypes {
public struct SwfBlendMode {
public enum Mode {
Normal, // +
Layer, // -
Layer, // +
Multiply, // +
Screen, // +
Lighten, // +
@@ -43,6 +43,8 @@ namespace FlashTools.Internal.SwfTools.SwfTypes {
switch ( Value ) {
case Mode.Normal:
return new SwfBlendModeData(SwfBlendModeData.Types.Normal);
case Mode.Layer:
return new SwfBlendModeData(SwfBlendModeData.Types.Layer);
case Mode.Multiply:
return new SwfBlendModeData(SwfBlendModeData.Types.Multiply);
case Mode.Screen:

View File

@@ -159,6 +159,7 @@ namespace FlashTools.Internal {
Shader SelectShader(bool masked, SwfBlendModeData.Types blend_type) {
switch ( blend_type ) {
case SwfBlendModeData.Types.Normal:
case SwfBlendModeData.Types.Layer:
case SwfBlendModeData.Types.Multiply:
case SwfBlendModeData.Types.Screen:
case SwfBlendModeData.Types.Lighten:
@@ -201,6 +202,11 @@ namespace FlashTools.Internal {
material.SetInt("_SrcBlend", (int)BlendMode.One);
material.SetInt("_DstBlend", (int)BlendMode.OneMinusSrcAlpha);
break;
case SwfBlendModeData.Types.Layer:
material.SetInt("_BlendOp" , (int)BlendOp.Add);
material.SetInt("_SrcBlend", (int)BlendMode.One);
material.SetInt("_DstBlend", (int)BlendMode.OneMinusSrcAlpha);
break;
case SwfBlendModeData.Types.Multiply:
material.SetInt("_BlendOp" , (int)BlendOp.Add);
material.SetInt("_SrcBlend", (int)BlendMode.DstColor);

View File

@@ -109,6 +109,7 @@ namespace FlashTools {
public struct SwfBlendModeData {
public enum Types : byte {
Normal,
Layer,
Multiply,
Screen,
Lighten,
@@ -136,7 +137,7 @@ namespace FlashTools {
public static SwfBlendModeData operator*(
SwfBlendModeData a, SwfBlendModeData b)
{
return a.type == Types.Normal ? b : a;
return (a.type == Types.Normal || a.type == Types.Layer) ? b : a;
}
}