[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