[Bf-blender-cvs] [1053fb9d9dc] temp-gizmo-decoupled-redraws: Add separate region redraw tag for UI overlays (gizmos)
Julian Eisel
noreply at git.blender.org
Mon Jan 20 16:28:18 CET 2020
Commit: 1053fb9d9dcc0edd8561794c0693d7f4c4e45ed2
Author: Julian Eisel
Date: Fri Jan 17 17:47:15 2020 +0100
Branches: temp-gizmo-decoupled-redraws
https://developer.blender.org/rB1053fb9d9dcc0edd8561794c0693d7f4c4e45ed2
Add separate region redraw tag for UI overlays (gizmos)
===================================================================
M source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c
M source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c
M source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c
M source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c
M source/blender/editors/include/ED_screen.h
M source/blender/editors/screen/area.c
M source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c
M source/blender/editors/space_view3d/view3d_gizmo_ruler.c
M source/blender/editors/transform/transform_gizmo_2d.c
M source/blender/editors/transform/transform_gizmo_3d.c
M source/blender/makesdna/DNA_screen_types.h
M source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
M source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
M source/blender/windowmanager/gizmo/intern/wm_gizmo_target_props.c
M source/blender/windowmanager/gizmo/intern/wm_gizmo_type.c
===================================================================
diff --git a/source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c
index f1a8bc62cd3..33ad3b5ed9b 100644
--- a/source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c
+++ b/source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c
@@ -353,7 +353,7 @@ static int gizmo_arrow_modal(bContext *C,
}
/* tag the region for redraw */
- ED_region_tag_redraw(ar);
+ ED_region_tag_redraw_ui_overlays(CTX_wm_region(C));
WM_event_add_mousemove(C);
return OPERATOR_RUNNING_MODAL;
diff --git a/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c
index 2e4284d357a..214ea00e403 100644
--- a/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c
+++ b/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c
@@ -1086,7 +1086,7 @@ static int gizmo_cage2d_modal(bContext *C,
}
/* tag the region for redraw */
- ED_region_tag_redraw(CTX_wm_region(C));
+ ED_region_tag_redraw_ui_overlays(CTX_wm_region(C));
WM_event_add_mousemove(C);
return OPERATOR_RUNNING_MODAL;
diff --git a/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c
index 05b58903e04..11b1f715609 100644
--- a/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c
+++ b/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c
@@ -585,7 +585,7 @@ static int gizmo_cage3d_modal(bContext *C,
}
/* tag the region for redraw */
- ED_region_tag_redraw(CTX_wm_region(C));
+ ED_region_tag_redraw_ui_overlays(CTX_wm_region(C));
WM_event_add_mousemove(C);
return OPERATOR_RUNNING_MODAL;
diff --git a/source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c
index f040e67ae44..502163eba77 100644
--- a/source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c
+++ b/source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c
@@ -303,7 +303,7 @@ static int gizmo_move_modal(bContext *C,
zero_v3(move->prop_co);
}
- ED_region_tag_redraw(ar);
+ ED_region_tag_redraw_ui_overlays(ar);
inter->prev.tweak_flag = tweak_flag;
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index 6a801fc9928..bba80618de6 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -75,6 +75,9 @@ void ED_region_tag_redraw_partial(struct ARegion *ar, const struct rcti *rct, bo
void ED_region_tag_redraw_overlay(struct ARegion *ar);
void ED_region_tag_redraw_no_rebuild(struct ARegion *ar);
void ED_region_tag_refresh_ui(struct ARegion *ar);
+void ED_region_tag_redraw_ui_overlays(struct ARegion *ar);
+
+bool ED_region_can_redraw_ui_overlays_only(const struct ARegion *ar);
void ED_region_panels_init(struct wmWindowManager *wm, struct ARegion *ar);
void ED_region_panels_ex(const struct bContext *C,
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index 39b2c060ba4..a1322ee872d 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -658,6 +658,13 @@ void ED_region_tag_refresh_ui(ARegion *ar)
}
}
+void ED_region_tag_redraw_ui_overlays(ARegion *ar)
+{
+ if (ar) {
+ ar->do_draw |= RGN_DRAW_UI_OVERLAYS;
+ }
+}
+
void ED_region_tag_redraw_partial(ARegion *ar, const rcti *rct, bool rebuild)
{
if (ar && !(ar->do_draw & RGN_DRAWING)) {
@@ -727,6 +734,16 @@ void ED_area_tag_refresh(ScrArea *sa)
}
}
+/**
+ * For region draw functions to query if they can safe work by not doing a full-redraw, but only
+ * redrawing UI overlays (gizmos).
+ */
+bool ED_region_can_redraw_ui_overlays_only(const ARegion *ar)
+{
+ return (ar->do_draw & RGN_DRAW_UI_OVERLAYS) &&
+ !(ar->do_draw & (RGN_DRAW | RGN_DRAW_PARTIAL | RGN_DRAW_NO_REBUILD));
+}
+
/* *************************************************************** */
/* use NULL to disable it */
diff --git a/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c b/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c
index 68159e2d684..3f7d3916591 100644
--- a/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c
+++ b/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c
@@ -227,7 +227,7 @@ static int gizmo_preselect_elem_test_select(bContext *C, wmGizmo *gz, const int
if (best.ele) {
ARegion *ar = CTX_wm_region(C);
- ED_region_tag_redraw(ar);
+ ED_region_tag_redraw_ui_overlays(ar);
}
// return best.eed ? 0 : -1;
@@ -383,7 +383,7 @@ static int gizmo_preselect_edgering_test_select(bContext *C, wmGizmo *gz, const
RNA_int_set(gz->ptr, "edge_index", gz_ring->edge_index);
ARegion *ar = CTX_wm_region(C);
- ED_region_tag_redraw(ar);
+ ED_region_tag_redraw_ui_overlays(ar);
}
// return best.eed ? 0 : -1;
diff --git a/source/blender/editors/space_view3d/view3d_gizmo_ruler.c b/source/blender/editors/space_view3d/view3d_gizmo_ruler.c
index e53957b054d..3522fb63322 100644
--- a/source/blender/editors/space_view3d/view3d_gizmo_ruler.c
+++ b/source/blender/editors/space_view3d/view3d_gizmo_ruler.c
@@ -933,7 +933,7 @@ static int gizmo_ruler_modal(bContext *C,
ruler_info->drag_state_prev.do_thickness = do_thickness;
if (do_draw) {
- ED_region_tag_redraw(ar);
+ ED_region_tag_redraw_ui_overlays(ar);
}
return exit_code;
}
@@ -1187,7 +1187,7 @@ static int view3d_ruler_remove_invoke(bContext *C, wmOperator *op, const wmEvent
/* Update the annotation layer. */
view3d_ruler_to_gpencil(C, gzgroup);
- ED_region_tag_redraw(ar);
+ ED_region_tag_redraw_ui_overlays(ar);
return OPERATOR_FINISHED;
}
}
diff --git a/source/blender/editors/transform/transform_gizmo_2d.c b/source/blender/editors/transform/transform_gizmo_2d.c
index 793552865a6..48502c0a7bc 100644
--- a/source/blender/editors/transform/transform_gizmo_2d.c
+++ b/source/blender/editors/transform/transform_gizmo_2d.c
@@ -276,7 +276,7 @@ static int gizmo2d_modal(bContext *C,
gizmo2d_origin_to_region(ar, origin);
WM_gizmo_set_matrix_location(widget, origin);
- ED_region_tag_redraw(ar);
+ ED_region_tag_redraw_ui_overlays(ar);
return OPERATOR_RUNNING_MODAL;
}
diff --git a/source/blender/editors/transform/transform_gizmo_3d.c b/source/blender/editors/transform/transform_gizmo_3d.c
index b3c1fbd3aad..309750a2cfd 100644
--- a/source/blender/editors/transform/transform_gizmo_3d.c
+++ b/source/blender/editors/transform/transform_gizmo_3d.c
@@ -1567,7 +1567,7 @@ static int gizmo_modal(bContext *C,
WM_gizmo_set_matrix_location(widget, rv3d->twmat[3]);
}
- ED_region_tag_redraw(ar);
+ ED_region_tag_redraw_ui_overlays(ar);
return OPERATOR_RUNNING_MODAL;
}
diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h
index 60fb7b62dff..d1aad87ea2b 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -657,19 +657,23 @@ enum {
/** #ARegion.do_draw */
enum {
/* Region must be fully redrawn. */
- RGN_DRAW = 1,
+ RGN_DRAW = (1 << 0),
/* Redraw only part of region, for sculpting and painting to get smoother
* stroke painting on heavy meshes. */
- RGN_DRAW_PARTIAL = 2,
+ RGN_DRAW_PARTIAL = (1 << 1),
/* For outliner, to do faster redraw without rebuilding outliner tree.
* For 3D viewport, to display a new progressive render sample without
* while other buffers and overlays remain unchanged. */
- RGN_DRAW_NO_REBUILD = 4,
+ RGN_DRAW_NO_REBUILD = (1 << 2),
/* Set while region is being drawn. */
- RGN_DRAWING = 8,
+ RGN_DRAWING = (1 << 3),
/* For popups, to refresh UI layout along with drawing. */
- RGN_REFRESH_UI = 16,
+ RGN_REFRESH_UI = (1 << 4),
+
+ /* At least UI overlays (currently gizmos only!) should be redrawn. Note that other flags may
+ still indicate that more than that needs to be redrawn. */
+ RGN_DRAW_UI_OVERLAYS = (1 << 5),
};
#endif /* __DNA_SCREEN_TYPES_H__ */
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
index 14657bfa6bd..abd27fda910 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
@@ -310,7 +310,7 @@ void WM_gizmo_group_remove_by_tool(bContext *C,
if (gzgroup->type == gzgt) {
BLI_assert(gzgroup->parent_gzmap == gzmap);
wm_gizmogroup_free(C, gzgroup);
- ED_region_tag_redraw(ar);
+ ED_region_tag_redraw_ui_overlays(ar);
}
}
}
@@ -391,7 +391,7 @@ static int gizmo_select_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSE
}
if (redraw) {
- ED_region_tag_redraw(ar);
+ ED_region_tag_redraw_ui_overlays(ar);
}
return OPERATOR_FINISHED;
@@ -924,7 +924,7 @@ wmGizmoGroup *WM_gizmomaptype_group_init_runtime_with_region(wmGizmoMapType *gzm
wm_gizmomap_highlight_set(gzmap, NULL, NULL, 0);
- ED_region_tag_redraw(ar);
+ ED_region_tag_redraw_ui_overlays(ar);
return gzgroup;
}
@@ -956,7 +956,7 @@ void WM_gizmomaptype_group_unlink(bContext *C,
if (gzgroup->type == gzgt) {
BLI_assert(gzgroup->parent_gzmap == gzmap);
wm_gizmogroup_free(C, gzgroup);
- ED_region_tag_redraw(ar);
+ ED_region_tag_redraw_ui_overlays(ar);
}
}
}
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
index 59975080f49..2c604b47dae 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
@@ -1047,7 +1047,7 @@ bool wm_gizmomap_highlight_set(wmGizmoMap *gzmap, const bContext *C, wmGizmo *gz
/* tag the region for redraw */
if (C) {
ARegion *ar = CTX_wm_region(C);
- ED_region_ta
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list