Fix [#28436] ID mask creates 'feather' around ID even with AA turned off.
authorBastien Montagne <montagne29@wanadoo.fr>
Sun, 2 Oct 2011 12:57:49 +0000 (12:57 +0000)
committerBastien Montagne <montagne29@wanadoo.fr>
Sun, 2 Oct 2011 12:57:49 +0000 (12:57 +0000)
Perhaps not the ideal solution, but it works, is easy to undo if/when we have a better one, and I’m pretty sure it won’t break anything...

source/blender/editors/space_node/drawnode.c
source/blender/makesrna/intern/rna_nodetree.c
source/blender/nodes/composite/nodes/node_composite_idMask.c

index 970eccb8be384581d3eb31b6cae76599c734d495..219aa3261c7b89aabdcf9fc602f3fcbbc14efb32 100644 (file)
@@ -1538,6 +1538,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, "smooth_mask", 0, NULL, ICON_NONE);
 }
 
 static void node_composit_buts_file_output(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
index 1b113620663c797573399fb144745cdf491e341f..23a71b20c329fdc87653442066855d8e178e4f0e 100644 (file)
@@ -1874,6 +1874,11 @@ static void def_cmp_id_mask(StructRNA *srna)
        RNA_def_property_range(prop, 0, 10000);
        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, "smooth_mask", 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_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 }
 
 static void def_cmp_map_uv(StructRNA *srna)
index 43f78a90add04bda1087e9494530870355e0c862..ddab415b3be2cfcb4d40e96d347a3be20aec17c9 100644 (file)
@@ -99,7 +99,7 @@ static void node_composit_exec_idmask(void *data, bNode *node, bNodeStack **in,
                
                stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1); /* allocs */;
                
-               if(rd->scemode & R_FULL_SAMPLE)
+               if((rd->scemode & R_FULL_SAMPLE) || node->custom2 == 0)
                        do_idmask_fsa(stackbuf, cbuf, (float)node->custom1);
                else
                        do_idmask(stackbuf, cbuf, (float)node->custom1);