Commit: cd5ee246565d06240f578e0ffba1310254bbec3e
Author: Bastien Montagne
Date:   Fri Aug 3 10:15:34 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBcd5ee246565d06240f578e0ffba1310254bbec3e

Operators: add a new flag stating that operator needs access to evaluated data.

For now, that flag is only used in redo code, since after undo step
depsgraph is totally empty... We *may* want to add at least an assert in
op calling code too, though?

===================================================================

M       source/blender/editors/undo/ed_undo.c
M       source/blender/makesrna/intern/rna_wm.c
M       source/blender/windowmanager/WM_types.h

===================================================================

diff --git a/source/blender/editors/undo/ed_undo.c 
b/source/blender/editors/undo/ed_undo.c
index 7c1dc148dde..ffe4008f7d6 100644
--- a/source/blender/editors/undo/ed_undo.c
+++ b/source/blender/editors/undo/ed_undo.c
@@ -48,6 +48,7 @@
 #include "BKE_context.h"
 #include "BKE_global.h"
 #include "BKE_main.h"
+#include "BKE_scene.h"
 #include "BKE_screen.h"
 #include "BKE_layer.h"
 #include "BKE_undo_system.h"
@@ -414,6 +415,15 @@ int ED_undo_operator_repeat(bContext *C, wmOperator *op)
                                }
                        }
 
+                       if (op->type->flag & OPTYPE_USE_EVAL_DATA) {
+                               /* We need to force refresh of depsgraph after 
undo step,
+                                * redoing the operator *may* rely on some 
valid evaluated data. */
+                               Main *bmain = CTX_data_main(C);
+                               scene = CTX_data_scene(C);
+                               ViewLayer *view_layer = CTX_data_view_layer(C);
+                               
BKE_scene_view_layer_graph_evaluated_ensure(bmain, scene, view_layer);
+                       }
+
                        retval = WM_operator_repeat(C, op);
                        if ((retval & OPERATOR_FINISHED) == 0) {
                                if (G.debug & G_DEBUG)
diff --git a/source/blender/makesrna/intern/rna_wm.c 
b/source/blender/makesrna/intern/rna_wm.c
index 3432adc6eb3..a4c8dfbbdef 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -432,6 +432,8 @@ static const EnumPropertyItem operator_flag_items[] = {
                              "is enabled"},
        {OPTYPE_PRESET, "PRESET", 0, "Preset", "Display a preset button with 
the operators settings"},
        {OPTYPE_INTERNAL, "INTERNAL", 0, "Internal", "Removes the operator from 
search results"},
+       {OPTYPE_USE_EVAL_DATA, "USE_EVAL_DATA", 0, "Use Evaluated Data",
+                              "Uses evaluated data (i.e. needs a valid 
depsgraph for current context)"},
        {0, NULL, 0, NULL, NULL}
 };
 #endif
diff --git a/source/blender/windowmanager/WM_types.h 
b/source/blender/windowmanager/WM_types.h
index 60dd9ad2e72..6b1bb8f4806 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -145,6 +145,7 @@ enum {
 
        OPTYPE_LOCK_BYPASS  = (1 << 7),  /* Allow operator to run when 
interface is locked */
        OPTYPE_UNDO_GROUPED = (1 << 8),  /* Special type of undo which doesn't 
store itself multiple times */
+       OPTYPE_USE_EVAL_DATA = (1 << 9),  /* Need evaluated data (i.e. a valid, 
up-to-date depsgraph for current context) */
 };
 
 /* context to call operator in for WM_operator_name_call */

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

Reply via email to