Paste P752

(An Untitled Masterwork)
ActivePublic

Authored by Brecht Van Lommel (brecht) on Jul 12 2018, 5:12 PM.
Tags
None
Subscribers
None
1diff --git a/source/blender/compositor/nodes/COM_CryptomatteNode.cpp b/source/blender/compositor/nodes/COM_CryptomatteNode.cpp
2index 07d75aa..58eb6d1 100644
3--- a/source/blender/compositor/nodes/COM_CryptomatteNode.cpp
4+++ b/source/blender/compositor/nodes/COM_CryptomatteNode.cpp
5@@ -56,7 +56,7 @@ void CryptomatteNode::convertToOperations(NodeConverter &converter, const Compos
6​ NodeInput *inputSocketImage = this->getInputSocket(0);
7​ NodeOutput *outputSocketImage = this->getOutputSocket(0);
8​ NodeOutput *outputSocketMatte = this->getOutputSocket(1);
9- NodeOutput *outputCryptoPick = this->getOutputSocket(2);
10+ NodeOutput *outputSocketPick = this->getOutputSocket(2);
11
12​ bNode *node = this->getbNode();
13​ NodeCryptomatte *cryptoMatteSettings = (NodeCryptomatte *)node->storage;
14@@ -106,7 +106,7 @@ void CryptomatteNode::convertToOperations(NodeConverter &converter, const Compos
15​ converter.mapInputSocket(inputSocketImage, operationAlpha->getInputSocket(0));
16​ converter.mapOutputSocket(outputSocketMatte, separateOperation->getOutputSocket(0));
17​ converter.mapOutputSocket(outputSocketImage, operationAlpha->getOutputSocket(0));
18- converter.mapOutputSocket(outputCryptoPick, operation->getOutputSocket(0));
19+ converter.mapOutputSocket(outputSocketPick, operation->getOutputSocket(0));
20
21​ converter.addLink(operation->getOutputSocket(0), separateOperation->getInputSocket(0));
22​ converter.addLink(separateOperation->getOutputSocket(0), operationAlpha->getInputSocket(1));
23diff --git a/source/blender/compositor/operations/COM_CryptomatteOperation.cpp b/source/blender/compositor/operations/COM_CryptomatteOperation.cpp
24index 13e23d5..267eb70 100644
25--- a/source/blender/compositor/operations/COM_CryptomatteOperation.cpp
26+++ b/source/blender/compositor/operations/COM_CryptomatteOperation.cpp
27@@ -57,7 +57,7 @@ void CryptomatteOperation::executePixel(float output[4],
28​ /* Write the frontmost object as false color for picking. */
29​ output[0] = input[0];
30​ uint32_t m3hash;
31- ::memcpy(&m3hash, &input[0], 4);
32+ ::memcpy(&m3hash, &input[0], sizeof(uint32_t));
33​ output[1] = ((float) ((m3hash << 8)) / (float) UINT32_MAX);
34​ output[2] = ((float) ((m3hash << 16)) / (float) UINT32_MAX);
35​ }
36diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
37index 2007a0a..eefbeee 100644
38--- a/source/blender/editors/include/UI_interface.h
39+++ b/source/blender/editors/include/UI_interface.h
40@@ -969,7 +969,7 @@ void uiTemplateCurveMapping(
41​ bool levels, bool brush, bool neg_slope);
42​ void uiTemplateColorPicker(uiLayout *layout, struct PointerRNA *ptr, const char *propname, bool value_slider, bool lock, bool lock_luminosity, bool cubic);
43​ void uiTemplatePalette(uiLayout *layout, struct PointerRNA *ptr, const char *propname, bool color);
44-void uiTemplateEyedropper(uiLayout *layout, struct PointerRNA *ptr, const char *propname);
45+void uiTemplateCryptoPicker(uiLayout *layout, struct PointerRNA *ptr, const char *propname);
46​ void uiTemplateLayers(
47​ uiLayout *layout, struct PointerRNA *ptr, const char *propname,
48​ PointerRNA *used_ptr, const char *used_propname, int active_layer);
49diff --git a/source/blender/editors/interface/interface_eyedropper.c b/source/blender/editors/interface/interface_eyedropper.c
50index a073129..67486f3 100644
51--- a/source/blender/editors/interface/interface_eyedropper.c
52+++ b/source/blender/editors/interface/interface_eyedropper.c
53@@ -82,10 +82,10 @@ wmKeyMap *eyedropper_modal_keymap(wmKeyConfig *keyconf)
54​ /* assign to operators */
55​ WM_modalkeymap_assign(keymap, "UI_OT_eyedropper_colorband");
56​ WM_modalkeymap_assign(keymap, "UI_OT_eyedropper_color");
57+ WM_modalkeymap_assign(keymap, "UI_OT_eyedropper_color_crypto");
58​ WM_modalkeymap_assign(keymap, "UI_OT_eyedropper_id");
59​ WM_modalkeymap_assign(keymap, "UI_OT_eyedropper_depth");
60​ WM_modalkeymap_assign(keymap, "UI_OT_eyedropper_driver");
61- WM_modalkeymap_assign(keymap, "UI_OT_eyedropper_color_separate");
62
63​ return keymap;
64​ }
65diff --git a/source/blender/editors/interface/interface_eyedropper_color.c b/source/blender/editors/interface/interface_eyedropper_color.c
66index 6975076..bcb6001 100644
67--- a/source/blender/editors/interface/interface_eyedropper_color.c
68+++ b/source/blender/editors/interface/interface_eyedropper_color.c
69@@ -28,7 +28,6 @@
70​ *
71​ * Defines:
72​ * - #UI_OT_eyedropper_color
73- * - #UI_OT_eyedropper_color_separate
74​ */
75
76​ #include "MEM_guardedalloc.h"
77@@ -37,6 +36,7 @@
78​ #include "DNA_screen_types.h"
79
80​ #include "BLI_math_vector.h"
81+#include "BLI_string.h"
82
83​ #include "BKE_context.h"
84​ #include "BKE_main.h"
85@@ -73,6 +73,8 @@ typedef struct Eyedropper {
86​ bool accum_start; /* has mouse been pressed */
87​ float accum_col[3];
88​ int accum_tot;
89+
90+ bool accumulate; /* Color picking for cryptomatte, without accumulation. */
91​ } Eyedropper;
92
93​ static bool eyedropper_init(bContext *C, wmOperator *op)
94@@ -81,6 +83,7 @@ static bool eyedropper_init(bContext *C, wmOperator *op)
95​ Eyedropper *eye;
96
97​ op->customdata = eye = MEM_callocN(sizeof(Eyedropper), "Eyedropper");
98+ eye->accumulate = !STREQ(op->type->idname, "UI_OT_eyedropper_color_crypto");
99
100​ UI_context_active_but_prop_get(C, &eye->ptr, &eye->prop, &eye->index);
101
102@@ -208,29 +211,30 @@ static void eyedropper_color_set(bContext *C, Eyedropper *eye, const float col[3
103​ RNA_property_update(C, &eye->ptr, eye->prop);
104​ }
105
106-/* set sample from accumulated values */
107-static void eyedropper_color_set_accum(bContext *C, Eyedropper *eye)
108-{
109- float col[3];
110- mul_v3_v3fl(col, eye->accum_col, 1.0f / (float)eye->accum_tot);
111- eyedropper_color_set(C, eye, col);
112-}
113-
114-/* single point sample & set */
115​ static void eyedropper_color_sample(bContext *C, Eyedropper *eye, int mx, int my)
116​ {
117+ /* Accumulate color. */
118​ float col[3];
119​ eyedropper_color_sample_fl(C, mx, my, col);
120- eyedropper_color_set(C, eye, col);
121-}
122
123-static void eyedropper_color_sample_accum(bContext *C, Eyedropper *eye, int mx, int my)
124-{
125- float col[3];
126- eyedropper_color_sample_fl(C, mx, my, col);
127- /* delay linear conversion */
128- add_v3_v3(eye->accum_col, col);
129- eye->accum_tot++;
130+ if (eye->accumulate) {
131+ add_v3_v3(eye->accum_col, col);
132+ eye->accum_tot++;
133+ }
134+ else {
135+ copy_v3_v3(eye->accum_col, col);
136+ eye->accum_tot = 1;
137+ }
138+
139+ /* Apply to property. */
140+ float accum_col[3];
141+ if (eye->accum_tot > 1) {
142+ mul_v3_v3fl(accum_col, eye->accum_col, 1.0f / (float)eye->accum_tot);
143+ }
144+ else {
145+ copy_v3_v3(accum_col, eye->accum_col);
146+ }
147+ eyedropper_color_set(C, eye, accum_col);
148​ }
149
150​ static void eyedropper_cancel(bContext *C, wmOperator *op)
151@@ -255,29 +259,24 @@ static int eyedropper_modal(bContext *C, wmOperator *op, const wmEvent *event)
152​ if (eye->accum_tot == 0) {
153​ eyedropper_color_sample(C, eye, event->x, event->y);
154​ }
155- else {
156- eyedropper_color_set_accum(C, eye);
157- }
158​ eyedropper_exit(C, op);
159​ return OPERATOR_FINISHED;
160​ case EYE_MODAL_SAMPLE_BEGIN:
161​ /* enable accum and make first sample */
162​ eye->accum_start = true;
163- eyedropper_color_sample_accum(C, eye, event->x, event->y);
164+ eyedropper_color_sample(C, eye, event->x, event->y);
165​ break;
166​ case EYE_MODAL_SAMPLE_RESET:
167​ eye->accum_tot = 0;
168​ zero_v3(eye->accum_col);
169- eyedropper_color_sample_accum(C, eye, event->x, event->y);
170- eyedropper_color_set_accum(C, eye);
171+ eyedropper_color_sample(C, eye, event->x, event->y);
172​ break;
173​ }
174​ }
175- else if (event->type == MOUSEMOVE) {
176+ else if (ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE)) {
177​ if (eye->accum_start) {
178​ /* button is pressed so keep sampling */
179- eyedropper_color_sample_accum(C, eye, event->x, event->y);
180- eyedropper_color_set_accum(C, eye);
181+ eyedropper_color_sample(C, eye, event->x, event->y);
182​ }
183​ }
184
185@@ -322,20 +321,9 @@ static int eyedropper_exec(bContext *C, wmOperator *op)
186
187​ static bool eyedropper_poll(bContext *C)
188​ {
189- PointerRNA ptr;
190- PropertyRNA *prop;
191- int index_dummy;
192- uiBut *but;
193-
194- /* Only color buttons */
195- if ((CTX_wm_window(C) != NULL) &&
196- (but = UI_context_active_but_prop_get(C, &ptr, &prop, &index_dummy)) &&
197- (but->type == UI_BTYPE_COLOR))
198- {
199- return 1;
200- }
201-
202- return 0;
203+ /* Actual test for active button happens later, since we don't
204+ * know which one is active until mouse over. */
205+ return (CTX_wm_window(C) != NULL);
206​ }
207
208​ void UI_OT_eyedropper_color(wmOperatorType *ot)
209@@ -354,32 +342,22 @@ void UI_OT_eyedropper_color(wmOperatorType *ot)
210
211​ /* flags */
212​ ot->flag = OPTYPE_BLOCKING | OPTYPE_INTERNAL;
213-
214- /* properties */
215-}
216-
217-static bool eyedropper_separate(bContext *C)
218-{
219- if(!CTX_wm_window(C)) return 0;
220- else return 1;
221​ }
222
223-void UI_OT_eyedropper_color_separate(wmOperatorType *ot)
224+void UI_OT_eyedropper_color_crypto(wmOperatorType *ot)
225​ {
226​ /* identifiers */
227- ot->name = "Eyedropper";
228- ot->idname = "UI_OT_eyedropper_color_separate";
229- ot->description = "Sample a color from the Blender Window to store in a property";
230+ ot->name = "Cryptomatte Eyedropper";
231+ ot->idname = "UI_OT_eyedropper_color_crypto";
232+ ot->description = "Pick a color from Cryptomatte node Pick output image";
233
234​ /* api callbacks */
235​ ot->invoke = eyedropper_invoke;
236​ ot->modal = eyedropper_modal;
237​ ot->cancel = eyedropper_cancel;
238​ ot->exec = eyedropper_exec;
239- ot->poll = eyedropper_separate;
240+ ot->poll = eyedropper_poll;
241
242​ /* flags */
243​ ot->flag = OPTYPE_BLOCKING | OPTYPE_INTERNAL;
244-
245- /* properties */
246​ }
247diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
248index f4ccdde..dc5e100 100644
249--- a/source/blender/editors/interface/interface_intern.h
250+++ b/source/blender/editors/interface/interface_intern.h
251@@ -763,6 +763,7 @@ struct wmKeyMap *eyedropper_colorband_modal_keymap(struct wmKeyConfig *keyconf);
252
253​ /* interface_eyedropper_color.c */
254​ void UI_OT_eyedropper_color(struct wmOperatorType *ot);
255+void UI_OT_eyedropper_color_crypto(struct wmOperatorType *ot);
256
257​ /* interface_eyedropper_colorband.c */
258​ void UI_OT_eyedropper_colorband(struct wmOperatorType *ot);
259@@ -776,6 +777,5 @@ void UI_OT_eyedropper_depth(struct wmOperatorType *ot);
260
261​ /* interface_eyedropper_driver.c */
262​ void UI_OT_eyedropper_driver(struct wmOperatorType *ot);
263-void UI_OT_eyedropper_color_separate(struct wmOperatorType *ot);
264
265​ #endif /* __INTERFACE_INTERN_H__ */
266diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c
267index 83f3418..1e67ecd 100644
268--- a/source/blender/editors/interface/interface_ops.c
269+++ b/source/blender/editors/interface/interface_ops.c
270@@ -1138,12 +1138,12 @@ void ED_operatortypes_ui(void)
271
272​ /* external */
273​ WM_operatortype_append(UI_OT_eyedropper_color);
274+ WM_operatortype_append(UI_OT_eyedropper_color_crypto);
275​ WM_operatortype_append(UI_OT_eyedropper_colorband);
276​ WM_operatortype_append(UI_OT_eyedropper_colorband_point);
277​ WM_operatortype_append(UI_OT_eyedropper_id);
278​ WM_operatortype_append(UI_OT_eyedropper_depth);
279​ WM_operatortype_append(UI_OT_eyedropper_driver);
280- WM_operatortype_append(UI_OT_eyedropper_color_separate);
281​ }
282
283​ /**
284diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
285index 029899c..daee0d3 100644
286--- a/source/blender/editors/interface/interface_templates.c
287+++ b/source/blender/editors/interface/interface_templates.c
288@@ -2572,12 +2572,11 @@ void uiTemplatePalette(uiLayout *layout, PointerRNA *ptr, const char *propname,
289​ }
290​ }
291
292-void uiTemplateEyedropper(uiLayout *layout, PointerRNA *ptr, const char *propname)
293+void uiTemplateCryptoPicker(uiLayout *layout, PointerRNA *ptr, const char *propname)
294​ {
295​ PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
296​ uiBlock *block;
297​ uiBut *but;
298- uiLayout *col;
299
300​ if (!prop) {
301​ RNA_warning("property not found: %s.%s", RNA_struct_identifier(ptr->type), propname);
302@@ -2586,11 +2585,7 @@ void uiTemplateEyedropper(uiLayout *layout, PointerRNA *ptr, const char *propnam
303
304​ block = uiLayoutGetBlock(layout);
305
306- col = uiLayoutColumn(layout, true);
307- uiLayoutRow(col, true);
308-
309- uiDefBut(block, UI_BTYPE_LABEL, 0, RNA_property_ui_name(prop), 0, 19, 145, 19, NULL, 0, 0, 0, 0, RNA_property_ui_description(prop));
310- but = uiDefIconButO(block, UI_BTYPE_BUT, "UI_OT_eyedropper_color_separate", WM_OP_INVOKE_DEFAULT, ICON_EYEDROPPER, 0, 0, UI_UNIT_X, UI_UNIT_Y, NULL);
311+ but = uiDefIconTextButO(block, UI_BTYPE_BUT, "UI_OT_eyedropper_color_crypto", WM_OP_INVOKE_DEFAULT, ICON_EYEDROPPER, RNA_property_ui_name(prop), 0, 0, UI_UNIT_X, UI_UNIT_Y, RNA_property_ui_description(prop));
312​ but->rnapoin = *ptr;
313​ but->rnaprop = prop;
314​ but->rnaindex = -1;
315diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
316index 55d44a5..d67dbc2 100644
317--- a/source/blender/editors/space_node/drawnode.c
318+++ b/source/blender/editors/space_node/drawnode.c
319@@ -2544,9 +2544,15 @@ static void node_composit_buts_sunbeams(uiLayout *layout, bContext *UNUSED(C), P
320
321​ static void node_composit_buts_cryptomatte(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
322​ {
323- uiItemR(layout, ptr, "matte_id", 0, NULL, ICON_NONE);
324- uiTemplateEyedropper(layout, ptr, "add");
325- uiTemplateEyedropper(layout, ptr, "remove");
326+ uiLayout *col = uiLayoutColumn(layout, true);
327+
328+ uiItemL(col, IFACE_("Matte Objects:"), ICON_NONE);
329+
330+ uiLayout *row = uiLayoutRow(col, true);
331+ uiTemplateCryptoPicker(row, ptr, "add");
332+ uiTemplateCryptoPicker(row, ptr, "remove");
333+
334+ uiItemR(col, ptr, "matte_id", 0, "", ICON_NONE);
335​ }
336
337​ static void node_composit_buts_cryptomatte_ex(uiLayout *layout, bContext *UNUSED(C), PointerRNA *UNUSED(ptr))
338diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
339index 0b1aafc..54fc1a4 100644
340--- a/source/blender/makesrna/intern/rna_nodetree.c
341+++ b/source/blender/makesrna/intern/rna_nodetree.c
342@@ -6973,25 +6973,19 @@ static void def_cmp_cryptomatte(StructRNA *srna)
343​ RNA_def_struct_sdna_from(srna, "NodeCryptomatte", "storage");
344​ prop = RNA_def_property(srna, "matte_id", PROP_STRING, PROP_NONE);
345​ RNA_def_property_string_sdna(prop, NULL, "matte_id");
346- RNA_def_property_ui_text(prop, "Matte List", "");
347+ RNA_def_property_ui_text(prop, "Matte Objects", "List of object and material crypto IDs to include in matte");
348​ RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
349
350​ prop = RNA_def_property(srna, "add", PROP_FLOAT, PROP_COLOR);
351- RNA_def_property_float_sdna(prop, NULL, "add");
352- RNA_def_property_array(prop, 3);
353​ RNA_def_property_float_array_default(prop, default_1);
354​ RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
355- RNA_def_property_ui_range(prop, 0, 2, 0.1, 3);
356- RNA_def_property_ui_text(prop, "Add", "Add to matte");
357+ RNA_def_property_ui_text(prop, "Add", "Add object or material to matte, by picking a color from the Pick output");
358​ RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeCryptomatte_update_add");
359
360​ prop = RNA_def_property(srna, "remove", PROP_FLOAT, PROP_COLOR);
361- RNA_def_property_float_sdna(prop, NULL, "remove");
362- RNA_def_property_array(prop, 3);
363​ RNA_def_property_float_array_default(prop, default_1);
364​ RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
365- RNA_def_property_ui_range(prop, 0, 2, 0.1, 3);
366- RNA_def_property_ui_text(prop, "Remove", "Remove from matte");
367+ RNA_def_property_ui_text(prop, "Remove", "Remove object or material from matte, by picking a color from the Pick output");
368​ RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeCryptomatte_update_remove");
369​ }
370
371diff --git a/source/blender/nodes/composite/nodes/node_composite_cryptomatte.c b/source/blender/nodes/composite/nodes/node_composite_cryptomatte.c
372index 1941f54..0d78053 100644
373--- a/source/blender/nodes/composite/nodes/node_composite_cryptomatte.c
374+++ b/source/blender/nodes/composite/nodes/node_composite_cryptomatte.c
375@@ -195,7 +195,7 @@ static void cryptomatte_remove(NodeCryptomatte*n, float f)
376​ static bNodeSocketTemplate outputs[] = {
377​ { SOCK_RGBA, 0, N_("Image")},
378​ { SOCK_FLOAT, 0, N_("Matte")},
379- { SOCK_RGBA, 0, N_("CryptoPick")},
380+ { SOCK_RGBA, 0, N_("Pick")},
381​ { -1, 0, "" }
382​ };
383