option to disable feather, since its so slow - for interactively editing masks its...
authorCampbell Barton <ideasman42@gmail.com>
Thu, 21 Jun 2012 12:27:57 +0000 (12:27 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 21 Jun 2012 12:27:57 +0000 (12:27 +0000)
also rename RNA to 'use_antialiasing'

12 files changed:
SConstruct
source/blender/blenkernel/BKE_mask.h
source/blender/blenkernel/intern/mask.c
source/blender/blenkernel/intern/sequencer.c
source/blender/compositor/nodes/COM_MaskNode.cpp
source/blender/compositor/operations/COM_MaskOperation.cpp
source/blender/compositor/operations/COM_MaskOperation.h
source/blender/editors/space_node/drawnode.c
source/blender/makesdna/DNA_node_types.h
source/blender/makesrna/intern/rna_nodetree.c
source/blender/nodes/composite/nodes/node_composite_mask.c
source/blender/python/bmesh/bmesh_py_utils.c

index 9bc61d7aeb2de00a0093d7c77f6efd8952407545..088361af6497d3696de39efd99177ff3cc488337 100644 (file)
@@ -240,6 +240,7 @@ print B.bc.OKGREEN + "Build with debug symbols%s: %s" % (B.bc.ENDC, env['BF_DEBU
 if 'blenderlite' in B.targets:
     target_env_defs = {}
     target_env_defs['WITH_BF_GAMEENGINE'] = False
+    target_env_defs['WITH_BF_CYCLES'] = False
     target_env_defs['WITH_BF_OPENAL'] = False
     target_env_defs['WITH_BF_OPENEXR'] = False
     target_env_defs['WITH_BF_OPENMP'] = False
index 0e93869a8b0d9e7d6bf6f63e742f0363ed7d222b..ea50d0fac39675745f4e6642a5d2b5e1d6f725c2 100644 (file)
@@ -170,7 +170,8 @@ void BKE_mask_layer_shape_changed_remove(struct MaskLayer *masklay, int index, i
 /* rasterization */
 int BKE_mask_get_duration(struct Mask *mask);
 void BKE_mask_rasterize(struct Mask *mask, int width, int height, float *buffer,
-                        const short do_aspect_correct, int do_mask_aa);
+                        const short do_aspect_correct, const short do_mask_aa,
+                        const short do_feather);
 
 #define MASKPOINT_ISSEL_ANY(p)          ( ((p)->bezt.f1 | (p)->bezt.f2 | (p)->bezt.f2) & SELECT)
 #define MASKPOINT_ISSEL_KNOT(p)         ( (p)->bezt.f2 & SELECT)
index b50356afcb591eeefe8aeaf09fedfd31ef8ed46d..3dc584c374eabbe2683157a7759ca2f974790848 100644 (file)
@@ -2090,7 +2090,8 @@ int BKE_mask_get_duration(Mask *mask)
 
 /* rasterization */
 void BKE_mask_rasterize(Mask *mask, int width, int height, float *buffer,
-                        const short do_aspect_correct, int do_mask_aa)
+                        const short do_aspect_correct, const short do_mask_aa,
+                        const short do_feather)
 {
        MaskLayer *masklay;
 
@@ -2119,9 +2120,15 @@ void BKE_mask_rasterize(Mask *mask, int width, int height, float *buffer,
                                                                                    &tot_diff_point);
 
                        if (tot_diff_point) {
-                               diff_feather_points =
-                                       BKE_mask_spline_feather_differentiated_points_with_resolution(spline, width, height,
-                                                                                                     &tot_diff_feather_points);
+                               if (do_feather) {
+                                       diff_feather_points =
+                                               BKE_mask_spline_feather_differentiated_points_with_resolution(spline, width, height,
+                                                                                                             &tot_diff_feather_points);
+                               }
+                               else {
+                                       tot_diff_feather_points = 0;
+                                       diff_feather_points = NULL;
+                               }
 
                                if (do_aspect_correct) {
                                        if (width != height) {
index ddf30ecfa81c38e861e6a3aa5ebd603cf3659cfe..8cb47118e7db7f27c87f303f4d3d6a4e125f28cb 100644 (file)
@@ -2082,7 +2082,9 @@ static ImBuf *seq_render_mask_strip(
                                   context.rectx, context.recty,
                                   maskbuf,
                                   TRUE,
-                                  FALSE /*XXX- TODO: make on/off for anti-aliasing*/);
+                                  FALSE, /*XXX- TODO: make on/off for anti-aliasing */
+                                  TRUE   /*XXX- TODO: make on/off for feather */
+                                  );
 
                fp_src = maskbuf;
                fp_dst = ibuf->rect_float;
@@ -2106,7 +2108,9 @@ static ImBuf *seq_render_mask_strip(
                                   context.rectx, context.recty,
                                   maskbuf,
                                   TRUE,
-                                  FALSE /*XXX- TODO: mask on/off for anti-aliasing*/);
+                                  FALSE, /*XXX- TODO: make on/off for anti-aliasing */
+                                  TRUE   /*XXX- TODO: make on/off for feather */
+                                  );
 
                fp_src = maskbuf;
                ub_dst = (unsigned char *)ibuf->rect;
index ed07e41a6497a3fc9f227a98d64c19ca0b8ba0ad..d0b6120198fa5be228f0a40d75c1f22b9fa377f8 100644 (file)
@@ -55,7 +55,8 @@ void MaskNode::convertToOperations(ExecutionSystem *graph, CompositorContext *co
 
        operation->setMask(mask);
        operation->setFramenumber(context->getFramenumber());
-       operation->setSmooth((bool)editorNode->custom1);
+       operation->setSmooth((bool)(editorNode->custom1 & CMP_NODEFLAG_MASK_AA) != 0);
+       operation->setFeather((bool)(editorNode->custom1 & CMP_NODEFLAG_MASK_FEATHER) != 0);
 
        graph->addOperation(operation);
 }
index 0493bdee12caf9dd578a2213f8c7b418be65789d..3b7e98433e4768435f524a189a13bed5f5133f66 100644 (file)
@@ -75,8 +75,8 @@ void *MaskOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers
                float *buffer;
 
                buffer = (float *)MEM_callocN(sizeof(float) * width * height, "rasterized mask");
-               BKE_mask_rasterize(mask, width, height, buffer, TRUE, this->smooth);
-               if (this->smooth) {
+               BKE_mask_rasterize(mask, width, height, buffer, TRUE, this->do_smooth, this->do_feather);
+               if (this->do_smooth) {
                        PLX_antialias_buffer(buffer, width, height);
                }
 
index 8507cb994c0564e6b402786ab8a53f28e13774f6..6b6d9aa9eebe5cbbb4ce36cd55dd791f3c1ae697 100644 (file)
@@ -40,7 +40,8 @@ protected:
        int maskWidth;
        int maskHeight;
        int framenumber;
-       bool smooth;
+       bool do_smooth;
+       bool do_feather;
        float *rasterizedMask;
 
        /**
@@ -60,7 +61,8 @@ public:
        void setMaskWidth(int width) { this->maskWidth = width; }
        void setMaskHeight(int height) { this->maskHeight = height; }
        void setFramenumber(int framenumber) { this->framenumber = framenumber; }
-       void setSmooth(bool smooth) { this->smooth = smooth; }
+       void setSmooth(bool smooth) { this->do_smooth = smooth; }
+       void setFeather(bool feather) { this->do_feather = feather; }
 
        void executePixel(float *color, int x, int y, MemoryBuffer *inputBuffers[], void *data);
 };
index 90cbdcd09a9134f67b11a22c60e2378ea9e36413..8a6438915317290fdba614b6b06cd06f16f1d784 100644 (file)
@@ -1894,7 +1894,7 @@ static void node_composit_buts_map_uv(uiLayout *layout, bContext *UNUSED(C), Poi
 static void node_composit_buts_id_mask(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
 {
        uiItemR(layout, ptr, "index", 0, NULL, ICON_NONE);
-       uiItemR(layout, ptr, "use_smooth_mask", 0, NULL, ICON_NONE);
+       uiItemR(layout, ptr, "use_antialiasing", 0, NULL, ICON_NONE);
 }
 
 /* draw function for file output node sockets, displays only sub-path and format, no value button */
@@ -2431,7 +2431,8 @@ static void node_composit_buts_viewer_but(uiLayout *layout, bContext *UNUSED(C),
 static void node_composit_buts_mask(uiLayout *layout, bContext *C, PointerRNA *ptr)
 {
        uiTemplateID(layout, C, ptr, "mask", NULL, NULL, NULL);
-       uiItemR(layout, ptr, "smooth_mask", 0, NULL, ICON_NONE);
+       uiItemR(layout, ptr, "use_antialiasing", 0, NULL, ICON_NONE);
+       uiItemR(layout, ptr, "use_feather", 0, NULL, ICON_NONE);
 
 }
 
index 8de9a29ed84d8643cde7418e0f1139724daf64af..ef6fba8cf932cb76ffcd75b5ed82bb3072f98256 100644 (file)
@@ -347,21 +347,31 @@ typedef struct bNodeSocketValueRGBA {
 
 
 /* data structs, for node->storage */
-
-#define CMP_NODE_MASKTYPE_ADD          0
-#define CMP_NODE_MASKTYPE_SUBTRACT     1
-#define CMP_NODE_MASKTYPE_MULTIPLY     2
-#define CMP_NODE_MASKTYPE_NOT          3
-
-#define CMP_NODE_LENSFLARE_GHOST   1
-#define CMP_NODE_LENSFLARE_GLOW    2
-#define CMP_NODE_LENSFLARE_CIRCLE  4
-#define CMP_NODE_LENSFLARE_STREAKS 8
-
-#define CMP_NODE_DILATEERODE_STEP            0
-#define CMP_NODE_DILATEERODE_DISTANCE_THRESH 1
-#define CMP_NODE_DILATEERODE_DISTANCE        2
-#define CMP_NODE_DILATEERODE_DISTANCE_FEATHER 3
+enum {
+       CMP_NODE_MASKTYPE_ADD         = 0,
+       CMP_NODE_MASKTYPE_SUBTRACT    = 1,
+       CMP_NODE_MASKTYPE_MULTIPLY    = 2,
+       CMP_NODE_MASKTYPE_NOT         = 3
+};
+
+enum {
+       CMP_NODE_LENSFLARE_GHOST   = 1,
+       CMP_NODE_LENSFLARE_GLOW    = 2,
+       CMP_NODE_LENSFLARE_CIRCLE  = 4,
+       CMP_NODE_LENSFLARE_STREAKS = 8
+};
+
+enum {
+       CMP_NODE_DILATEERODE_STEP             = 0,
+       CMP_NODE_DILATEERODE_DISTANCE_THRESH  = 1,
+       CMP_NODE_DILATEERODE_DISTANCE         = 2,
+       CMP_NODE_DILATEERODE_DISTANCE_FEATHER = 3
+};
+
+enum {
+       CMP_NODEFLAG_MASK_AA      = (1 << 0),
+       CMP_NODEFLAG_MASK_FEATHER = (1 << 1)
+};
 
 typedef struct NodeFrame {
        short flag;
index 51bd778d54313556e6c5b77f10b6dd4617deb97a..6d9386858afdf615900ac6c1fc613d32b303ca64 100644 (file)
@@ -2466,9 +2466,9 @@ static void def_cmp_id_mask(StructRNA *srna)
        RNA_def_property_ui_text(prop, "Index", "Pass index number to convert to alpha");
        RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
 
-       prop = RNA_def_property(srna, "use_smooth_mask", PROP_BOOLEAN, PROP_NONE);
+       prop = RNA_def_property(srna, "use_antialiasing", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "custom2", 0);
-       RNA_def_property_ui_text(prop, "Smooth Mask", "Apply an anti-aliasing filter to the mask");
+       RNA_def_property_ui_text(prop, "Anti-Aliasing", "Apply an anti-aliasing filter to the mask");
        RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
 }
 
@@ -3119,16 +3119,21 @@ static void def_cmp_mask(StructRNA *srna)
 {
        PropertyRNA *prop;
 
-       prop = RNA_def_property(srna, "smooth_mask", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "custom1", 0);
-       RNA_def_property_ui_text(prop, "Anti-Alias", "Apply an anti-aliasing filter to the mask");
-       RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
-
        prop = RNA_def_property(srna, "mask", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "id");
        RNA_def_property_struct_type(prop, "Mask");
        RNA_def_property_flag(prop, PROP_EDITABLE);
        RNA_def_property_ui_text(prop, "Mask", "");
+
+       prop = RNA_def_property(srna, "use_antialiasing", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "custom1", CMP_NODEFLAG_MASK_AA);
+       RNA_def_property_ui_text(prop, "Anti-Alias", "Apply an anti-aliasing filter to the mask");
+       RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
+
+       prop = RNA_def_property(srna, "use_feather", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "custom1", CMP_NODE_MASK_ELLIPSE);
+       RNA_def_property_ui_text(prop, "Feather", "Apply an anti-aliasing filter to the mask");
+       RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
 }
 
 static void dev_cmd_transform(StructRNA *srna)
index 91c3e9fbaf73e5823e048e22d2cf7c08d4097183..8af06b513c6789ee00d97bef2c78223d4eb5530c 100644 (file)
@@ -70,7 +70,9 @@ static void exec(void *data, bNode *node, bNodeStack **UNUSED(in), bNodeStack **
                stackbuf = alloc_compbuf(sx, sy, CB_VAL, TRUE);
                res = stackbuf->rect;
 
-               BKE_mask_rasterize(mask, sx, sy, res, TRUE, node->custom1);
+               BKE_mask_rasterize(mask, sx, sy, res, TRUE,
+                                  (node->custom1 & CMP_NODEFLAG_MASK_AA) != 0,
+                                  (node->custom1 & CMP_NODEFLAG_MASK_FEATHER) != 0);
 
                if (node->custom1) {
                        PLX_antialias_buffer(res,sx,sy);
index 374a01c51f8cfdeccaaa997168b7bee66246d370..bb4e0c61c2b305f487463a2c20734c8c15f54a2d 100644 (file)
@@ -370,7 +370,7 @@ static PyObject *bpy_bm_utils_edge_rotate(PyObject *UNUSED(self), PyObject *args
 PyDoc_STRVAR(bpy_bm_utils_face_split_doc,
 ".. method:: face_split(face, vert_a, vert_b, coords=(), use_exist=True, example=None)\n"
 "\n"
-"   Split an edge, return the newly created data.\n"
+"   Face split with optional intermediate points.\n"
 "\n"
 "   :arg face: The face to cut.\n"
 "   :type face: :class:`bmesh.types.BMFace`\n"