[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48951] trunk/blender/source/blender: mask blending modes: lighten/darken/multiply/replace

Campbell Barton ideasman42 at gmail.com
Mon Jul 16 09:23:17 CEST 2012


Revision: 48951
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48951
Author:   campbellbarton
Date:     2012-07-16 07:23:16 +0000 (Mon, 16 Jul 2012)
Log Message:
-----------
mask blending modes: lighten/darken/multiply/replace

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/mask_rasterize.c
    trunk/blender/source/blender/makesdna/DNA_mask_types.h
    trunk/blender/source/blender/makesrna/intern/rna_mask.c

Modified: trunk/blender/source/blender/blenkernel/intern/mask_rasterize.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mask_rasterize.c	2012-07-16 07:04:10 UTC (rev 48950)
+++ trunk/blender/source/blender/blenkernel/intern/mask_rasterize.c	2012-07-16 07:23:16 UTC (rev 48951)
@@ -979,21 +979,21 @@
 		float value_layer;
 
 		if (BLI_in_rctf_v(&layer->bounds, xy)) {
-			float val = 1.0f - layer_bucket_depth_from_xy(layer, xy);
+			value_layer = 1.0f - layer_bucket_depth_from_xy(layer, xy);
 
 			switch (layer->falloff) {
 				case PROP_SMOOTH:
 					/* ease - gives less hard lines for dilate/erode feather */
-					val = (3.0f * val * val - 2.0f * val * val * val);
+					value_layer = (3.0f * value_layer * value_layer - 2.0f * value_layer * value_layer * value_layer);
 					break;
 				case PROP_SPHERE:
-					val = sqrtf(2.0f * val - val * val);
+					value_layer = sqrtf(2.0f * value_layer - value_layer * value_layer);
 					break;
 				case PROP_ROOT:
-					val = sqrtf(val);
+					value_layer = sqrtf(value_layer);
 					break;
 				case PROP_SHARP:
-					val = val * val;
+					value_layer = value_layer * value_layer;
 					break;
 				case PROP_LIN:
 				default:
@@ -1001,7 +1001,9 @@
 					break;
 			}
 
-			value_layer = val * layer->alpha;
+			if (layer->blend != MASK_BLEND_REPLACE) {
+				value_layer *= layer->alpha;
+			}
 		}
 		else {
 			value_layer = 0.0f;
@@ -1012,17 +1014,28 @@
 		}
 
 		switch (layer->blend) {
+			case MASK_BLEND_ADD:
+				value += value_layer;
+				break;
 			case MASK_BLEND_SUBTRACT:
-			{
 				value -= value_layer;
 				break;
-			}
-			case MASK_BLEND_ADD:
-			default:
-			{
+			case MASK_BLEND_LIGHTEN:
+				value = maxf(value, value_layer);
+				break;
+			case MASK_BLEND_DARKEN:
+				value = minf(value, value_layer);
+				break;
+			case MASK_BLEND_MUL:
+				value *= value_layer;
+				break;
+			case MASK_BLEND_REPLACE:
+				value = (value * (1.0f - layer->alpha)) + (value_layer * layer->alpha);
+				break;
+			default: /* same as add */
+				BLI_assert(0);
 				value += value_layer;
 				break;
-			}
 		}
 	}
 

Modified: trunk/blender/source/blender/makesdna/DNA_mask_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_mask_types.h	2012-07-16 07:04:10 UTC (rev 48950)
+++ trunk/blender/source/blender/makesdna/DNA_mask_types.h	2012-07-16 07:23:16 UTC (rev 48951)
@@ -168,7 +168,11 @@
 /* masklay->blend */
 enum {
 	MASK_BLEND_ADD      = 0,
-	MASK_BLEND_SUBTRACT = 1
+	MASK_BLEND_SUBTRACT = 1,
+	MASK_BLEND_LIGHTEN  = 2,
+	MASK_BLEND_DARKEN   = 3,
+	MASK_BLEND_MUL      = 4,
+	MASK_BLEND_REPLACE  = 5,
 };
 
 /* masklay->blend_flag */

Modified: trunk/blender/source/blender/makesrna/intern/rna_mask.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_mask.c	2012-07-16 07:04:10 UTC (rev 48950)
+++ trunk/blender/source/blender/makesrna/intern/rna_mask.c	2012-07-16 07:23:16 UTC (rev 48951)
@@ -581,6 +581,10 @@
 	static EnumPropertyItem masklay_blend_mode_items[] = {
 		{MASK_BLEND_ADD, "ADD", 0, "Add", ""},
 		{MASK_BLEND_SUBTRACT, "SUBTRACT", 0, "Subtract", ""},
+		{MASK_BLEND_LIGHTEN, "LIGHTEN", 0, "Lighten", ""},
+		{MASK_BLEND_DARKEN, "DARKEN", 0, "Darken", ""},
+		{MASK_BLEND_MUL, "MUL", 0, "Multiply", ""},
+		{MASK_BLEND_REPLACE, "REPLACE", 0, "Replace", ""},
 		{0, NULL, 0, NULL, NULL}
 	};
 




More information about the Bf-blender-cvs mailing list