From 9516921c05bd9fee5c94942eb8e38f47ba7e4351 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Mon, 2 Dec 2019 01:40:58 +0100 Subject: Overlay Engine: Refactor & Cleanup This is the unification of all overlays into one overlay engine as described in T65347. I went over all the code making it more future proof with less hacks and removing old / not relevent parts. Goals / Acheivements: - Remove internal shader usage (only drw shaders) - Remove viewportSize and viewportSizeInv and put them in gloabl ubo - Fixed some drawing issues: Missing probe option and Missing Alt+B clipping of some shader - Remove old (legacy) shaders dependancy (not using view UBO). - Less shader variation (less compilation time at first load and less patching needed for vulkan) - removed some geom shaders when I could - Remove static e_data (except shaders storage where it is OK) - Clear the way to fix some anoying limitations (dithered transparency, background image compositing etc...) - Wireframe drawing now uses the same batching capabilities as workbench & eevee (indirect drawing). - Reduced complexity, removed ~3000 Lines of code in draw (also removed a lot of unused shader in GPU). - Post AA to avoid complexity and cost of MSAA. Remaining issues: - ~~Armature edits, overlay toggles, (... others?) are not refreshing viewport after AA is complete~~ - FXAA is not the best for wires, maybe investigate SMAA - Maybe do something more temporally stable for AA. - ~~Paint overlays are not working with AA.~~ - ~~infront objects are difficult to select.~~ - ~~the infront wires sometimes goes through they solid counterpart (missing clear maybe?) (toggle overlays on-off when using infront+wireframe overlay in solid shading)~~ Note: I made some decision to change slightly the appearance of some objects to simplify their drawing. Namely the empty arrows end (which is now hollow/wire) and distance points of the cameras/spots being done by lines. Reviewed By: jbakker Differential Revision: https://developer.blender.org/D6296 --- source/blender/editors/armature/armature_add.c | 8 ++++++++ source/blender/editors/armature/armature_edit.c | 13 +++++++++++++ .../blender/editors/armature/armature_relations.c | 1 + source/blender/editors/armature/armature_select.c | 21 +++++++++++++++++++++ 4 files changed, 43 insertions(+) (limited to 'source/blender/editors/armature') diff --git a/source/blender/editors/armature/armature_add.c b/source/blender/editors/armature/armature_add.c index 8a53883492e..7a14de2b240 100644 --- a/source/blender/editors/armature/armature_add.c +++ b/source/blender/editors/armature/armature_add.c @@ -51,6 +51,8 @@ #include "ED_screen.h" #include "ED_view3d.h" +#include "DEG_depsgraph.h" + #include "armature_intern.h" /* *************** Adding stuff in editmode *************** */ @@ -214,6 +216,7 @@ static int armature_click_extrude_exec(bContext *C, wmOperator *UNUSED(op)) ED_armature_edit_sync_selection(arm->edbo); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); + DEG_id_tag_update(&obedit->id, ID_RECALC_SELECT); return OPERATOR_FINISHED; } @@ -609,6 +612,7 @@ static int armature_duplicate_selected_exec(bContext *C, wmOperator *op) ED_armature_edit_validate_active(arm); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&ob->id, ID_RECALC_SELECT); } MEM_freeN(objects); @@ -838,6 +842,7 @@ static int armature_symmetrize_exec(bContext *C, wmOperator *op) ED_armature_edit_validate_active(arm); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); + DEG_id_tag_update(&obedit->id, ID_RECALC_SELECT); } MEM_freeN(objects); @@ -1053,6 +1058,7 @@ static int armature_extrude_exec(bContext *C, wmOperator *op) ED_armature_edit_sync_selection(arm->edbo); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&ob->id, ID_RECALC_SELECT); } MEM_freeN(objects); @@ -1126,6 +1132,7 @@ static int armature_bone_primitive_add_exec(bContext *C, wmOperator *op) /* note, notifier might evolve */ WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); + DEG_id_tag_update(&obedit->id, ID_RECALC_SELECT); return OPERATOR_FINISHED; } @@ -1215,6 +1222,7 @@ static int armature_subdivide_exec(bContext *C, wmOperator *op) /* note, notifier might evolve */ WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); + DEG_id_tag_update(&obedit->id, ID_RECALC_SELECT); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/armature/armature_edit.c b/source/blender/editors/armature/armature_edit.c index 64857dd1874..4ca0cd117b6 100644 --- a/source/blender/editors/armature/armature_edit.c +++ b/source/blender/editors/armature/armature_edit.c @@ -57,6 +57,8 @@ #include "ED_screen.h" #include "ED_view3d.h" +#include "DEG_depsgraph.h" + #include "armature_intern.h" /* ************************** Object Tools Exports ******************************* */ @@ -443,6 +445,7 @@ static int armature_calc_roll_exec(bContext *C, wmOperator *op) if (changed) { /* note, notifier might evolve */ WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&arm->id, ID_RECALC_SELECT); } } @@ -512,6 +515,7 @@ static int armature_roll_clear_exec(bContext *C, wmOperator *op) if (changed) { /* Note, notifier might evolve. */ WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&arm->id, ID_RECALC_SELECT); } } MEM_freeN(objects); @@ -844,6 +848,7 @@ static int armature_fill_bones_exec(bContext *C, wmOperator *op) /* updates */ ED_armature_edit_refresh_layer_used(arm); WM_event_add_notifier(C, NC_OBJECT | ND_POSE, obedit); + DEG_id_tag_update(&arm->id, ID_RECALC_COPY_ON_WRITE); /* free points */ BLI_freelistN(&points); @@ -1038,6 +1043,7 @@ static int armature_merge_exec(bContext *C, wmOperator *op) ED_armature_edit_sync_selection(arm->edbo); ED_armature_edit_refresh_layer_used(arm); WM_event_add_notifier(C, NC_OBJECT | ND_POSE, obedit); + DEG_id_tag_update(&arm->id, ID_RECALC_COPY_ON_WRITE); } MEM_freeN(objects); @@ -1182,6 +1188,7 @@ static int armature_switch_direction_exec(bContext *C, wmOperator *UNUSED(op)) /* note, notifier might evolve */ WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&arm->id, ID_RECALC_SELECT); } MEM_freeN(objects); @@ -1327,6 +1334,7 @@ static int armature_align_bones_exec(bContext *C, wmOperator *op) /* note, notifier might evolve */ WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&arm->id, ID_RECALC_SELECT); return OPERATOR_FINISHED; } @@ -1370,6 +1378,7 @@ static int armature_split_exec(bContext *C, wmOperator *UNUSED(op)) } WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&arm->id, ID_RECALC_SELECT); } MEM_freeN(objects); @@ -1447,6 +1456,7 @@ static int armature_delete_selected_exec(bContext *C, wmOperator *UNUSED(op)) ED_armature_edit_refresh_layer_used(arm); BKE_pose_tag_recalc(CTX_data_main(C), obedit->pose); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); + DEG_id_tag_update(&arm->id, ID_RECALC_SELECT); } } MEM_freeN(objects); @@ -1621,6 +1631,7 @@ static int armature_dissolve_selected_exec(bContext *C, wmOperator *UNUSED(op)) ED_armature_edit_sync_selection(arm->edbo); ED_armature_edit_refresh_layer_used(arm); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); + DEG_id_tag_update(&arm->id, ID_RECALC_SELECT); } } MEM_freeN(objects); @@ -1684,6 +1695,7 @@ static int armature_hide_exec(bContext *C, wmOperator *op) ED_armature_edit_sync_selection(arm->edbo); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); + DEG_id_tag_update(&arm->id, ID_RECALC_SELECT); } MEM_freeN(objects); return OPERATOR_FINISHED; @@ -1736,6 +1748,7 @@ static int armature_reveal_exec(bContext *C, wmOperator *op) ED_armature_edit_sync_selection(arm->edbo); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); + DEG_id_tag_update(&arm->id, ID_RECALC_SELECT); } } MEM_freeN(objects); diff --git a/source/blender/editors/armature/armature_relations.c b/source/blender/editors/armature/armature_relations.c index b3588404cf2..b60c8ce4592 100644 --- a/source/blender/editors/armature/armature_relations.c +++ b/source/blender/editors/armature/armature_relations.c @@ -879,6 +879,7 @@ static int armature_parent_set_exec(bContext *C, wmOperator *op) /* note, notifier might evolve */ WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&ob->id, ID_RECALC_SELECT); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/armature/armature_select.c b/source/blender/editors/armature/armature_select.c index c37f9ce126b..0f288c0d8b8 100644 --- a/source/blender/editors/armature/armature_select.c +++ b/source/blender/editors/armature/armature_select.c @@ -363,6 +363,7 @@ static int armature_select_linked_invoke(bContext *C, wmOperator *op, const wmEv ED_armature_edit_sync_selection(arm->edbo); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, base->object); + DEG_id_tag_update(&arm->id, ID_RECALC_COPY_ON_WRITE); return OPERATOR_FINISHED; } @@ -792,6 +793,7 @@ bool ED_armature_edit_select_pick( } WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, basact->object); + DEG_id_tag_update(&arm->id, ID_RECALC_COPY_ON_WRITE); return true; } @@ -1037,6 +1039,10 @@ static int armature_de_select_all_exec(bContext *C, wmOperator *op) WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, NULL); + /* Tagging only one object to refresh drawing. */ + Object *obedit = CTX_data_edit_object(C); + DEG_id_tag_update(&obedit->id, ID_RECALC_SELECT); + return OPERATOR_FINISHED; } @@ -1154,6 +1160,7 @@ static int armature_de_select_more_exec(bContext *C, wmOperator *UNUSED(op)) Object *ob = objects[ob_index]; armature_select_more_less(ob, true); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&ob->id, ID_RECALC_COPY_ON_WRITE); } MEM_freeN(objects); @@ -1186,6 +1193,7 @@ static int armature_de_select_less_exec(bContext *C, wmOperator *UNUSED(op)) Object *ob = objects[ob_index]; armature_select_more_less(ob, false); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&ob->id, ID_RECALC_COPY_ON_WRITE); } MEM_freeN(objects); @@ -1274,6 +1282,7 @@ static void select_similar_length(bContext *C, const float thresh) if (changed) { WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&ob->id, ID_RECALC_COPY_ON_WRITE); } } MEM_freeN(objects); @@ -1323,6 +1332,8 @@ static void select_similar_direction(bContext *C, const float thresh) if (changed) { WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&ob->id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(&ob->id, ID_RECALC_COPY_ON_WRITE); } } MEM_freeN(objects); @@ -1352,6 +1363,7 @@ static void select_similar_layer(bContext *C) if (changed) { WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&ob->id, ID_RECALC_COPY_ON_WRITE); } } MEM_freeN(objects); @@ -1393,6 +1405,7 @@ static void select_similar_prefix(bContext *C) if (changed) { WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&ob->id, ID_RECALC_COPY_ON_WRITE); } } MEM_freeN(objects); @@ -1434,6 +1447,7 @@ static void select_similar_suffix(bContext *C) if (changed) { WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&ob->id, ID_RECALC_COPY_ON_WRITE); } } MEM_freeN(objects); @@ -1461,6 +1475,7 @@ static void select_similar_data_pchan(bContext *C, const size_t bytes_size, cons } WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); + DEG_id_tag_update(&obedit->id, ID_RECALC_COPY_ON_WRITE); } static void is_ancestor(EditBone *bone, EditBone *ancestor) @@ -1495,6 +1510,7 @@ static void select_similar_children(bContext *C) } WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); + DEG_id_tag_update(&obedit->id, ID_RECALC_COPY_ON_WRITE); } static void select_similar_children_immediate(bContext *C) @@ -1510,6 +1526,7 @@ static void select_similar_children_immediate(bContext *C) } WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); + DEG_id_tag_update(&obedit->id, ID_RECALC_COPY_ON_WRITE); } static void select_similar_siblings(bContext *C) @@ -1529,6 +1546,7 @@ static void select_similar_siblings(bContext *C) } WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); + DEG_id_tag_update(&obedit->id, ID_RECALC_COPY_ON_WRITE); } static int armature_select_similar_exec(bContext *C, wmOperator *op) @@ -1682,6 +1700,7 @@ static int armature_select_hierarchy_exec(bContext *C, wmOperator *op) ED_armature_edit_sync_selection(arm->edbo); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&ob->id, ID_RECALC_COPY_ON_WRITE); return OPERATOR_FINISHED; } @@ -1769,6 +1788,7 @@ static int armature_select_mirror_exec(bContext *C, wmOperator *op) ED_armature_edit_sync_selection(arm->edbo); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + DEG_id_tag_update(&ob->id, ID_RECALC_COPY_ON_WRITE); } MEM_freeN(objects); @@ -1897,6 +1917,7 @@ static int armature_shortest_path_pick_invoke(bContext *C, wmOperator *op, const ED_outliner_select_sync_from_edit_bone_tag(C); ED_armature_edit_sync_selection(arm->edbo); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); + DEG_id_tag_update(&obedit->id, ID_RECALC_COPY_ON_WRITE); return OPERATOR_FINISHED; } -- cgit v1.2.3