[Bf-blender-cvs] [45e1d4d9ac3] blender2.8: DRW: Fix flat object not being selectable in wireframe view

Clément Foucault noreply at git.blender.org
Tue Dec 18 20:52:00 CET 2018


Commit: 45e1d4d9ac36891b2e13a18f5d5211eabaaaef39
Author: Clément Foucault
Date:   Tue Dec 18 15:08:33 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB45e1d4d9ac36891b2e13a18f5d5211eabaaaef39

DRW: Fix flat object not being selectable in wireframe view

The problem was double. They were not selectable in wireframe view and
they would not display with the right color, thus always appearing
un-selected.

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

M	source/blender/draw/engines/basic/basic_engine.c
M	source/blender/draw/modes/overlay_mode.c

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

diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c
index 9dc8c8f2f34..eea41c932e2 100644
--- a/source/blender/draw/engines/basic/basic_engine.c
+++ b/source/blender/draw/engines/basic/basic_engine.c
@@ -141,6 +141,7 @@ static void basic_cache_populate(void *vedata, Object *ob)
 
 	/* Make flat object selectable in ortho view if wireframe is enabled. */
 	if ((draw_ctx->v3d->overlay.flag & V3D_OVERLAY_WIREFRAMES) ||
+	    (draw_ctx->v3d->shading.type == OB_WIRE) ||
 	    (ob->dtx & OB_DRAWWIRE) ||
 	    (ob->dt == OB_WIRE))
 	{
diff --git a/source/blender/draw/modes/overlay_mode.c b/source/blender/draw/modes/overlay_mode.c
index 0c67263bd4f..7060c1c9704 100644
--- a/source/blender/draw/modes/overlay_mode.c
+++ b/source/blender/draw/modes/overlay_mode.c
@@ -174,7 +174,6 @@ static void overlay_cache_init(void *vedata)
 		psl->face_wireframe_pass = DRW_pass_create("Face Wires", state);
 
 		g_data->flat_wires = DRW_shgroup_create(flat_wires_sh, psl->face_wireframe_pass);
-		DRW_shgroup_uniform_vec4(g_data->flat_wires, "color", ts.colorWire, 1);
 
 		g_data->sculpt_wires = DRW_shgroup_create(sculpt_wire_sh, psl->face_wireframe_pass);
 
@@ -246,6 +245,13 @@ static void overlay_cache_populate(void *vedata, Object *ob)
 			const int stencil_mask = (ob->dtx & OB_DRAWXRAY) ? 0x00 : 0xFF;
 			DRWShadingGroup *shgrp = NULL;
 
+			float *rim_col = ts.colorWire;
+			if (!is_edit_mode && !is_sculpt_mode && !has_edit_mesh_cage &&
+			    ((ob->base_flag & BASE_SELECTED) != 0))
+			{
+				rim_col = (ob == draw_ctx->obact) ? ts.colorActive : ts.colorSelect;
+			}
+
 			/* This fixes only the biggest case which is a plane in ortho view. */
 			int flat_axis = 0;
 			bool is_flat_object_viewed_from_side = (rv3d->persp == RV3D_ORTHO) &&
@@ -260,17 +266,12 @@ static void overlay_cache_populate(void *vedata, Object *ob)
 					shgrp = DRW_shgroup_create_sub(shgrp);
 					DRW_shgroup_stencil_mask(shgrp, stencil_mask);
 					DRW_shgroup_call_object_add(shgrp, geom, ob);
+					DRW_shgroup_uniform_vec4(shgrp, "color", rim_col, 1);
 				}
 			}
 			else {
 				struct GPUBatch *geom = DRW_cache_object_face_wireframe_get(ob);
 				if (geom || is_sculpt_mode) {
-					float *rim_col = ts.colorWire;
-					if (!is_edit_mode && !is_sculpt_mode && !has_edit_mesh_cage &&
-					    ((ob->base_flag & BASE_SELECTED) != 0))
-					{
-						rim_col = (ob == draw_ctx->obact) ? ts.colorActive : ts.colorSelect;
-					}
 					shgrp = (is_sculpt_mode) ? pd->sculpt_wires : pd->face_wires;
 					shgrp = DRW_shgroup_create_sub(shgrp);



More information about the Bf-blender-cvs mailing list