Fix T56865: Selection of bones not working properly if the option In Front (old X-ray) is enabled

Differential Revision: https://developer.blender.org/D3828
This commit is contained in:
2018-10-30 15:31:32 -03:00
parent bf5ba49698
commit 603774c1eb
3 changed files with 18 additions and 0 deletions

View File

@@ -2985,6 +2985,13 @@ static void OBJECT_draw_scene(void *vedata)
GPU_framebuffer_bind(fbl->ghost_fb);
GPU_framebuffer_clear_depth(fbl->ghost_fb, 1.0f);
}
else if (DRW_state_is_select()) {
/* XXX `GPU_depth_range` is not a perfect solution
* since very distant geometries can still be occluded.
* Also the depth test precision of these geometries is impaired.
* However solves the selection for the vast majority of cases. */
GPU_depth_range(0.0f, 0.01f);
}
DRW_draw_pass(stl->g_data->sgl_ghost.spot_shapes);
DRW_draw_pass(stl->g_data->sgl_ghost.bone_solid);
@@ -2992,6 +2999,10 @@ static void OBJECT_draw_scene(void *vedata)
DRW_draw_pass(stl->g_data->sgl_ghost.bone_outline);
DRW_draw_pass(stl->g_data->sgl_ghost.non_meshes);
DRW_draw_pass(stl->g_data->sgl_ghost.bone_axes);
if (DRW_state_is_select()) {
GPU_depth_range(0.0f, 1.0f);
}
}
batch_camera_path_free(&stl->g_data->sgl_ghost.camera_path);

View File

@@ -47,6 +47,7 @@ void GPU_blend_set_func(GPUBlendFunction sfactor, GPUBlendFunction dfactor);
void GPU_blend_set_func_separate(
GPUBlendFunction src_rgb, GPUBlendFunction dst_rgb,
GPUBlendFunction src_alpha, GPUBlendFunction dst_alpha);
void GPU_depth_range(float near, float far);
void GPU_depth_test(bool enable);
bool GPU_depth_test_enabled(void);
void GPU_line_smooth(bool enable);

View File

@@ -75,6 +75,12 @@ void GPU_blend_set_func_separate(
gpu_get_gl_blendfunction(dst_alpha));
}
void GPU_depth_range(float near, float far)
{
/* glDepthRangef is only for OpenGL 4.1 or higher */
glDepthRange(near, far);
}
void GPU_depth_test(bool enable)
{
if (enable) {