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}
        };
 

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to