From 54156e2b824c9e5a4293060b194630630d1f9dc7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 21 Jun 2012 12:27:57 +0000 Subject: option to disable feather, since its so slow - for interactively editing masks its useful to be able to disable. also rename RNA to 'use_antialiasing' --- SConstruct | 1 + source/blender/blenkernel/BKE_mask.h | 3 +- source/blender/blenkernel/intern/mask.c | 15 +++++--- source/blender/blenkernel/intern/sequencer.c | 8 +++-- source/blender/compositor/nodes/COM_MaskNode.cpp | 3 +- .../compositor/operations/COM_MaskOperation.cpp | 4 +-- .../compositor/operations/COM_MaskOperation.h | 6 ++-- source/blender/editors/space_node/drawnode.c | 5 +-- source/blender/makesdna/DNA_node_types.h | 40 ++++++++++++++-------- source/blender/makesrna/intern/rna_nodetree.c | 19 ++++++---- .../nodes/composite/nodes/node_composite_mask.c | 4 ++- source/blender/python/bmesh/bmesh_py_utils.c | 2 +- 12 files changed, 72 insertions(+), 38 deletions(-) diff --git a/SConstruct b/SConstruct index 9bc61d7aeb2..088361af649 100644 --- a/SConstruct +++ b/SConstruct @@ -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 diff --git a/source/blender/blenkernel/BKE_mask.h b/source/blender/blenkernel/BKE_mask.h index 0e93869a8b0..ea50d0fac39 100644 --- a/source/blender/blenkernel/BKE_mask.h +++ b/source/blender/blenkernel/BKE_mask.h @@ -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) diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c index b50356afcb5..3dc584c374e 100644 --- a/source/blender/blenkernel/intern/mask.c +++ b/source/blender/blenkernel/intern/mask.c @@ -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) { diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index ddf30ecfa81..8cb47118e7d 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -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; diff --git a/source/blender/compositor/nodes/COM_MaskNode.cpp b/source/blender/compositor/nodes/COM_MaskNode.cpp index ed07e41a649..d0b6120198f 100644 --- a/source/blender/compositor/nodes/COM_MaskNode.cpp +++ b/source/blender/compositor/nodes/COM_MaskNode.cpp @@ -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); } diff --git a/source/blender/compositor/operations/COM_MaskOperation.cpp b/source/blender/compositor/operations/COM_MaskOperation.cpp index 0493bdee12c..3b7e98433e4 100644 --- a/source/blender/compositor/operations/COM_MaskOperation.cpp +++ b/source/blender/compositor/operations/COM_MaskOperation.cpp @@ -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); } diff --git a/source/blender/compositor/operations/COM_MaskOperation.h b/source/blender/compositor/operations/COM_MaskOperation.h index 8507cb994c0..6b6d9aa9eeb 100644 --- a/source/blender/compositor/operations/COM_MaskOperation.h +++ b/source/blender/compositor/operations/COM_MaskOperation.h @@ -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); }; diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index 90cbdcd09a9..8a643891531 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -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); } diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h index 8de9a29ed84..ef6fba8cf93 100644 --- a/source/blender/makesdna/DNA_node_types.h +++ b/source/blender/makesdna/DNA_node_types.h @@ -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; diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index 51bd778d543..6d9386858af 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -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) diff --git a/source/blender/nodes/composite/nodes/node_composite_mask.c b/source/blender/nodes/composite/nodes/node_composite_mask.c index 91c3e9fbaf7..8af06b513c6 100644 --- a/source/blender/nodes/composite/nodes/node_composite_mask.c +++ b/source/blender/nodes/composite/nodes/node_composite_mask.c @@ -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); diff --git a/source/blender/python/bmesh/bmesh_py_utils.c b/source/blender/python/bmesh/bmesh_py_utils.c index 374a01c51f8..bb4e0c61c2b 100644 --- a/source/blender/python/bmesh/bmesh_py_utils.c +++ b/source/blender/python/bmesh/bmesh_py_utils.c @@ -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" -- cgit v1.2.3