Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2017-07-25 19:34:14 +0300
committerCampbell Barton <ideasman42@gmail.com>2017-07-25 19:35:27 +0300
commit2b1cd24c6ebacb17032914c0897038cd7e63b07b (patch)
tree7b00be073b41b63de7b255620eed2ecdca115b91 /source/blender
parent80e03e77099ba963cbc08545f0f28fe02e885110 (diff)
Fix T52190: Depth picking fails
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/draw/engines/basic/basic_engine.c33
-rw-r--r--source/blender/gpu/intern/gpu_select.c2
2 files changed, 28 insertions, 7 deletions
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
+}