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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user