[Bf-blender-cvs] [2b1cd24c6eb] blender2.8: Fix T52190: Depth picking fails

Campbell Barton noreply at git.blender.org
Tue Jul 25 18:23:07 CEST 2017


Commit: 2b1cd24c6ebacb17032914c0897038cd7e63b07b
Author: Campbell Barton
Date:   Wed Jul 26 02:34:14 2017 +1000
Branches: blender2.8
https://developer.blender.org/rB2b1cd24c6ebacb17032914c0897038cd7e63b07b

Fix T52190: Depth picking fails

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

M	source/blender/draw/engines/basic/basic_engine.c
M	source/blender/gpu/intern/gpu_select.c

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

diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c
index d1afb0b4a1e..cc78a43912e 100644
--- a/source/blender/draw/engines/basic/basic_engine.c
+++ b/source/blender/draw/engines/basic/basic_engine.c
@@ -206,21 +206,42 @@ static void BASIC_draw_scene(void *vedata)
 	BASIC_PassList *psl = ((BASIC_Data *)vedata)->psl;
 	BASIC_FramebufferList *fbl = ((BASIC_Data *)vedata)->fbl;
 	DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+	const bool is_select = DRW_state_is_select();
+
+	bool use_color = true;
+	bool use_depth = true;
+	bool use_depth_cull = true;
+
+	if (is_select) {
+		/* Needed for depth-picking,
+		 * for other selection types there are no need for extra passes either. */
+		use_color = false;
+		use_depth_cull = false;
+	}
 
 #ifdef USE_DEPTH
 	/* Pass 1 : Depth pre-pass */
-	DRW_draw_pass(psl->depth_pass);
-	DRW_draw_pass(psl->depth_pass_cull);
+	if (use_depth) {
+		DRW_draw_pass(psl->depth_pass);
+	}
+
+	if (use_depth_cull) {
+		DRW_draw_pass(psl->depth_pass_cull);
+	}
 
 	/* Pass 2 : Duplicate depth */
-	/* Unless we go for deferred shading we need this to avoid manual depth test and artifacts */
-	if (DRW_state_is_fbo()) {
-		DRW_framebuffer_blit(dfbl->default_fb, fbl->dupli_depth, true);
+	if (use_depth || use_depth_cull) {
+		/* Unless we go for deferred shading we need this to avoid manual depth test and artifacts */
+		if (DRW_state_is_fbo()) {
+			DRW_framebuffer_blit(dfbl->default_fb, fbl->dupli_depth, true);
+		}
 	}
 #endif
 
 	/* Pass 3 : Shading */
-	DRW_draw_pass(psl->color_pass);
+	if (use_color) {
+		DRW_draw_pass(psl->color_pass);
+	}
 }
 
 static void BASIC_engine_free(void)
diff --git a/source/blender/gpu/intern/gpu_select.c b/source/blender/gpu/intern/gpu_select.c
index affc96b2843..153cf5f1e97 100644
--- a/source/blender/gpu/intern/gpu_select.c
+++ b/source/blender/gpu/intern/gpu_select.c
@@ -252,4 +252,4 @@ const uint *GPU_select_buffer_near(const uint *buffer, int hits)
 		buffer += 4;
 	}
 	return buffer_near;
-}
\ No newline at end of file
+}




More information about the Bf-blender-cvs mailing list