[Bf-blender-cvs] [cc74020b5ac] master: Fix T62114: Wireframe mode selection: selects backside objects when clicking frontside object in 3d-window

Sebastian Parborg noreply at git.blender.org
Tue Apr 9 12:32:25 CEST 2019


Commit: cc74020b5ac7d974e91279e23efc80141c229b3c
Author: Sebastian Parborg
Date:   Tue Apr 9 12:29:02 2019 +0200
Branches: master
https://developer.blender.org/rBcc74020b5ac7d974e91279e23efc80141c229b3c

Fix T62114: Wireframe mode selection: selects backside objects when clicking frontside object in 3d-window

Now the depth order of objects when trying to select them is only used when not in X-ray mode.
Before, this was only the case in wireframe mode regardless of X-ray settings.

I've also unified the usage of V3D_XRAY and XRAY_FLAG as they were basically copies of each other.

Reviewed By: Clément

Differential Revision: http://developer.blender.org/D4504

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

M	source/blender/draw/engines/gpencil/gpencil_engine.c
M	source/blender/draw/engines/workbench/workbench_forward.c
M	source/blender/draw/engines/workbench/workbench_render.c
M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/modes/edit_armature_mode.c
M	source/blender/draw/modes/edit_mesh_mode.c
M	source/blender/draw/modes/object_mode.c
M	source/blender/draw/modes/overlay_mode.c
M	source/blender/draw/modes/pose_mode.c
M	source/blender/editors/armature/armature_select.c
M	source/blender/editors/include/ED_view3d.h
M	source/blender/editors/mesh/editmesh_select.c
M	source/blender/editors/physics/particle_edit.c
M	source/blender/editors/space_view3d/view3d_select.c
M	source/blender/editors/space_view3d/view3d_view.c
M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform_snap_object.c

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

diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index 56ef4b97dcf..303178c1a5e 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -405,7 +405,7 @@ void GPENCIL_cache_init(void *vedata)
 
 		/* xray mode */
 		if (v3d) {
-			stl->storage->is_xray = (v3d->shading.flag & V3D_XRAY_FLAG(v3d)) ? 1 : 0;
+			stl->storage->is_xray = XRAY_ACTIVE(v3d);
 		}
 		else {
 			stl->storage->is_xray = 0;
diff --git a/source/blender/draw/engines/workbench/workbench_forward.c b/source/blender/draw/engines/workbench/workbench_forward.c
index 45f1c632a05..a6c41f41198 100644
--- a/source/blender/draw/engines/workbench/workbench_forward.c
+++ b/source/blender/draw/engines/workbench/workbench_forward.c
@@ -38,6 +38,7 @@
 #include "DNA_modifier_types.h"
 #include "DNA_node_types.h"
 
+#include "ED_view3d.h"
 
 #include "GPU_shader.h"
 #include "GPU_texture.h"
diff --git a/source/blender/draw/engines/workbench/workbench_render.c b/source/blender/draw/engines/workbench/workbench_render.c
index c551a369b58..7ad8eea1c6e 100644
--- a/source/blender/draw/engines/workbench/workbench_render.c
+++ b/source/blender/draw/engines/workbench/workbench_render.c
@@ -28,6 +28,8 @@
 
 #include "DRW_render.h"
 
+#include "ED_view3d.h"
+
 #include "GPU_shader.h"
 
 #include "DEG_depsgraph.h"
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 3d4618021e8..ce75cc0f05d 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -598,8 +598,4 @@ typedef struct DRWContextState {
 
 const DRWContextState *DRW_context_state_get(void);
 
-#define XRAY_ALPHA(v3d)   (((v3d)->shading.type == OB_WIRE) ? (v3d)->shading.xray_alpha_wire : (v3d)->shading.xray_alpha)
-#define XRAY_FLAG(v3d)    (((v3d)->shading.type == OB_WIRE) ? V3D_SHADING_XRAY_BONE : V3D_SHADING_XRAY)
-#define XRAY_ENABLED(v3d) ((((v3d)->shading.flag & XRAY_FLAG(v3d)) != 0) && (XRAY_ALPHA(v3d) < 1.0f))
-
 #endif /* __DRW_RENDER_H__ */
diff --git a/source/blender/draw/modes/edit_armature_mode.c b/source/blender/draw/modes/edit_armature_mode.c
index 68f091da797..26d232600d0 100644
--- a/source/blender/draw/modes/edit_armature_mode.c
+++ b/source/blender/draw/modes/edit_armature_mode.c
@@ -26,6 +26,8 @@
 #include "DNA_armature_types.h"
 #include "DNA_view3d_types.h"
 
+#include "ED_view3d.h"
+
 #include "draw_common.h"
 #include "draw_mode_engines.h"
 
diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c
index 71c759d47a5..01bd43d9c6e 100644
--- a/source/blender/draw/modes/edit_mesh_mode.c
+++ b/source/blender/draw/modes/edit_mesh_mode.c
@@ -43,6 +43,8 @@
 #include "BLI_dynstr.h"
 #include "BLI_string_utils.h"
 
+#include "ED_view3d.h"
+
 extern char datatoc_paint_weight_vert_glsl[];
 extern char datatoc_paint_weight_frag_glsl[];
 
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index 563d1267885..94935da0f05 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -1011,8 +1011,7 @@ static void OBJECT_cache_init(void *vedata)
 	}
 
 	g_data = stl->g_data;
-	g_data->xray_enabled = XRAY_ENABLED(draw_ctx->v3d) &&
-	                       (draw_ctx->v3d->shading.type < OB_MATERIAL);
+	g_data->xray_enabled = XRAY_ACTIVE(draw_ctx->v3d);
 	g_data->xray_enabled_and_not_wire = g_data->xray_enabled && draw_ctx->v3d->shading.type > OB_WIRE;
 
 	{
diff --git a/source/blender/draw/modes/overlay_mode.c b/source/blender/draw/modes/overlay_mode.c
index 52e8f73f971..99102a22622 100644
--- a/source/blender/draw/modes/overlay_mode.c
+++ b/source/blender/draw/modes/overlay_mode.c
@@ -34,6 +34,8 @@
 #include "GPU_shader.h"
 #include "DRW_render.h"
 
+#include "ED_view3d.h"
+
 #include "draw_mode_engines.h"
 
 #ifdef __APPLE__
diff --git a/source/blender/draw/modes/pose_mode.c b/source/blender/draw/modes/pose_mode.c
index c4050bf3f1a..ec61eb99d52 100644
--- a/source/blender/draw/modes/pose_mode.c
+++ b/source/blender/draw/modes/pose_mode.c
@@ -27,6 +27,8 @@
 #include "DRW_engine.h"
 #include "DRW_render.h"
 
+#include "ED_view3d.h"
+
 /* If builtin shaders are needed */
 #include "GPU_shader.h"
 
diff --git a/source/blender/editors/armature/armature_select.c b/source/blender/editors/armature/armature_select.c
index 6e93ecc484d..4aab80bcbdd 100644
--- a/source/blender/editors/armature/armature_select.c
+++ b/source/blender/editors/armature/armature_select.c
@@ -419,7 +419,7 @@ static EditBone *get_nearest_editbonepoint(
 	if (use_cycle) {
 		static int last_mval[2] = {-100, -100};
 
-		if (vc->v3d->shading.type > OB_WIRE) {
+		if (!XRAY_ACTIVE(vc->v3d)) {
 			do_nearest = true;
 			if (len_manhattan_v2v2_int(vc->mval, last_mval) <= WM_EVENT_CURSOR_MOTION_THRESHOLD) {
 				do_nearest = false;
@@ -428,7 +428,7 @@ static EditBone *get_nearest_editbonepoint(
 		copy_v2_v2_int(last_mval, vc->mval);
 	}
 	else {
-		if (vc->v3d->shading.type > OB_WIRE) {
+		if (!XRAY_ACTIVE(vc->v3d)) {
 			do_nearest = true;
 		}
 	}
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index 2a115f49c31..e34014d179c 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -556,8 +556,12 @@ void ED_view3d_operator_properties_viewmat_get(struct wmOperator *op, int *winx,
 void ED_view3d_stop_render_preview(struct wmWindowManager *wm, struct ARegion *ar);
 void ED_view3d_shade_update(struct Main *bmain, struct View3D *v3d, struct ScrArea *sa);
 
-#define V3D_XRAY_FLAG(v3d)   (((v3d)->shading.type == OB_WIRE) ? V3D_SHADING_XRAY_BONE : V3D_SHADING_XRAY)
-#define V3D_IS_ZBUF(v3d)     (((v3d)->shading.flag & V3D_XRAY_FLAG(v3d)) == 0)
+#define XRAY_ALPHA(v3d)   (((v3d)->shading.type == OB_WIRE) ? (v3d)->shading.xray_alpha_wire : (v3d)->shading.xray_alpha)
+#define XRAY_FLAG(v3d)    (((v3d)->shading.type == OB_WIRE) ? V3D_SHADING_XRAY_BONE : V3D_SHADING_XRAY)
+#define XRAY_ENABLED(v3d) ((((v3d)->shading.flag & XRAY_FLAG(v3d)) != 0) && (XRAY_ALPHA(v3d) < 1.0f))
+#define XRAY_ACTIVE(v3d)  (XRAY_ENABLED(v3d) && ((v3d)->shading.type < OB_MATERIAL))
+
+#define V3D_IS_ZBUF(v3d)     (((v3d)->shading.flag & XRAY_FLAG(v3d)) == 0)
 
 /* view3d_draw_legacy.c */
 /* Try avoid using these more move out of legacy. */
diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c
index 1855eeab944..c04fe58c12e 100644
--- a/source/blender/editors/mesh/editmesh_select.c
+++ b/source/blender/editors/mesh/editmesh_select.c
@@ -215,7 +215,7 @@ bool EDBM_backbuf_border_init(
 {
 	uint *buf, *dr, buf_len;
 
-	if (vc->obedit == NULL || !V3D_IS_ZBUF(vc->v3d)) {
+	if (vc->obedit == NULL || XRAY_ENABLED(vc->v3d)) {
 		return false;
 	}
 
@@ -292,7 +292,7 @@ bool EDBM_backbuf_border_mask_init(ViewContext *vc, const int mcords[][2], short
 			return false;
 		}
 	}
-	else if (!V3D_IS_ZBUF(vc->v3d)) {
+	else if (XRAY_ENABLED(vc->v3d)) {
 		return false;
 	}
 
@@ -342,7 +342,7 @@ bool EDBM_backbuf_circle_init(
 			return false;
 		}
 	}
-	else if (!V3D_IS_ZBUF(vc->v3d)) {
+	else if (XRAY_ENABLED(vc->v3d)) {
 		return false;
 	}
 
@@ -464,7 +464,7 @@ BMVert *EDBM_vert_find_nearest_ex(
 {
 	BMesh *bm = vc->em->bm;
 
-	if (V3D_IS_ZBUF(vc->v3d)) {
+	if (!XRAY_ENABLED(vc->v3d)) {
 		uint dist_px = (uint)ED_view3d_backbuf_sample_size_clamp(vc->ar, *r_dist);
 		unsigned int index;
 		BMVert *eve;
@@ -655,7 +655,7 @@ BMEdge *EDBM_edge_find_nearest_ex(
 {
 	BMesh *bm = vc->em->bm;
 
-	if (V3D_IS_ZBUF(vc->v3d)) {
+	if (!XRAY_ENABLED(vc->v3d)) {
 		uint dist_px = (uint)ED_view3d_backbuf_sample_size_clamp(vc->ar, *r_dist);
 		unsigned int index;
 		BMEdge *eed;
@@ -825,7 +825,7 @@ BMFace *EDBM_face_find_nearest_ex(
 {
 	BMesh *bm = vc->em->bm;
 
-	if (V3D_IS_ZBUF(vc->v3d)) {
+	if (!XRAY_ENABLED(vc->v3d)) {
 		float dist_test = 0.0f;
 		unsigned int index;
 		BMFace *efa;
diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c
index 112d453c44a..efc969a333e 100644
--- a/source/blender/editors/physics/particle_edit.c
+++ b/source/blender/editors/physics/particle_edit.c
@@ -446,7 +446,7 @@ static void PE_set_view3d_data(bContext *C, PEData *data)
 
 	ED_view3d_viewcontext_init(C, &data->vc);
 
-	if (V3D_IS_ZBUF(data->vc.v3d)) {
+	if (!XRAY_ENABLED(data->vc.v3d)) {
 		if (data->vc.v3d->flag & V3D_INVALID_BACKBUF) {
 			/* needed or else the draw matrix can be incorrect */
 			view3d_operator_needs_opengl(C);
@@ -503,7 +503,7 @@ static bool key_test_depth(const PEData *data, const float co[3], const int scre
 	float depth;
 
 	/* nothing to do */
-	if (!V3D_IS_ZBUF(v3d))
+	if (XRAY_ENABLED(v3d))
 		return true;
 
 	/* used to calculate here but all callers have  the screen_co already, so pass as arg */
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index ea44f19c4fe..3ff6a7146c6 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -943,7 +943,7 @@ static void do_lasso_select_meshobject__doSelectVert(void *userData, MVert *mv,
 }
 static bool do_lasso_select_paintvert(ViewContext *vc, const int mcords[][2], short moves, const eSelectOp sel_op)
 {
-	const bool use_zbuf = V3D_IS_ZBUF(vc->v3d);
+	const bool use_zbuf = !XRAY_ENABLED(vc->v3d);
 	Object *ob = vc->obact;
 	Mesh *me = ob->data;
 	rcti rect;
@@ -1472,7 +1472,7 @@ static int mixed_bones_object_selectbuffer_extended(
 
 	/* define if we use solid nearest select or not */
 	if (use_cycle) {
-		if (v3d->shading.type > OB_WIRE) {
+		if (!XRAY_ACTIVE(v3d)) {
 			do_nearest = true;
 			if (len_manhattan_v2v2_int(mval, last_mval) <= WM_EVENT_CURSOR_MOTION_THRESHOLD) {
 				do_nearest = false;
@@ -1481,7 +1481,7 @@ static int mixed_bones_object_selectbuffer_extended(
 		copy_v2_v2_int(last_mval, mval);
 	}
 	else {
-		if (v3d->shading.type > OB_WIRE) {
+		if (!XRAY_ACTIVE(v3d)) {
 			do_nearest = true;
 		}
 	}
@@ -1630,7 +1630,7 @@ Base *ED_view3d_give_base_under_cursor(bContext *C,

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list