[Bf-blender-cvs] [c29cd41f49d] blender2.8: Edit Mode: Show loose edges if in draw type is wire

Clément Foucault noreply at git.blender.org
Tue Dec 18 22:18:06 CET 2018


Commit: c29cd41f49d263c97d03cc0f31f67988b3292bf0
Author: Clément Foucault
Date:   Tue Dec 18 21:45:06 2018 +0100
Branches: blender2.8
https://developer.blender.org/rBc29cd41f49d263c97d03cc0f31f67988b3292bf0

Edit Mode: Show loose edges if in draw type is wire

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

M	source/blender/draw/modes/object_mode.c

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

diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index 8f6b23e7c68..a12723144e8 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -50,6 +50,7 @@
 #include "BKE_camera.h"
 #include "BKE_constraint.h"
 #include "BKE_curve.h"
+#include "BKE_editmesh.h"
 #include "BKE_global.h"
 #include "BKE_mball.h"
 #include "BKE_mesh.h"
@@ -2600,6 +2601,7 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
 	OBJECT_StorageList *stl = ((OBJECT_Data *)vedata)->stl;
 	OBJECT_ShadingGroupList *sgl = (ob->dtx & OB_DRAWXRAY) ? &stl->g_data->sgl_ghost : &stl->g_data->sgl;
 	const DRWContextState *draw_ctx = DRW_context_state_get();
+	const bool is_edit_mode = (ob == draw_ctx->object_edit) || BKE_object_is_in_editmode(ob);
 	ViewLayer *view_layer = draw_ctx->view_layer;
 	Scene *scene = draw_ctx->scene;
 	View3D *v3d = draw_ctx->v3d;
@@ -2654,26 +2656,35 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
 			if (hide_object_extra) {
 				break;
 			}
-			if (ob != draw_ctx->object_edit) {
-				Mesh *me = ob->data;
-				if (me->totedge == 0) {
+			Mesh *me = ob->data;
+			if (me->totedge == 0) {
+				if (!is_edit_mode) {
 					struct GPUBatch *geom = DRW_cache_mesh_all_verts_get(ob);
 					if (geom) {
 						if (theme_id == TH_UNDEFINED) {
 							theme_id = DRW_object_wire_theme_get(ob, view_layer, NULL);
 						}
-
 						DRWShadingGroup *shgroup = shgroup_theme_id_to_point_or(sgl, theme_id, sgl->points);
 						DRW_shgroup_call_object_add(shgroup, geom, ob);
 					}
 				}
-				else {
+			}
+			else {
+				/* Kind of expensive in edit mode. Only show if in wireframe mode. */
+				bool has_edit_mesh_cage = false;
+				/* TODO: Should be its own function. */
+				if (is_edit_mode) {
+					BMEditMesh *embm = me->edit_btmesh;
+					has_edit_mesh_cage = embm->mesh_eval_cage && (embm->mesh_eval_cage != embm->mesh_eval_final);
+				}
+				if (!is_edit_mode ||
+				    (((v3d->shading.type < OB_SOLID) || (ob->dt == OB_WIRE)) && has_edit_mesh_cage))
+				{
 					struct GPUBatch *geom = DRW_cache_mesh_loose_edges_get(ob);
 					if (geom) {
 						if (theme_id == TH_UNDEFINED) {
 							theme_id = DRW_object_wire_theme_get(ob, view_layer, NULL);
 						}
-
 						DRWShadingGroup *shgroup = shgroup_theme_id_to_wire_or(sgl, theme_id, sgl->wire);
 						DRW_shgroup_call_object_add(shgroup, geom, ob);
 					}
@@ -2699,7 +2710,7 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
 		}
 		case OB_LATTICE:
 		{
-			if (ob != draw_ctx->object_edit && !BKE_object_is_in_editmode(ob)) {
+			if (is_edit_mode) {
 				if (hide_object_extra) {
 					break;
 				}
@@ -2715,7 +2726,7 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
 		}
 		case OB_CURVE:
 		{
-			if (ob != draw_ctx->object_edit) {
+			if (is_edit_mode) {
 				if (hide_object_extra) {
 					break;
 				}
@@ -2730,7 +2741,7 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
 		}
 		case OB_MBALL:
 		{
-			if (ob != draw_ctx->object_edit) {
+			if (is_edit_mode) {
 				DRW_shgroup_mball_handles(sgl, ob, view_layer);
 			}
 			break;



More information about the Bf-blender-cvs mailing list