[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