diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-03-22 09:27:39 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-03-22 09:28:53 +0300 |
commit | 6e7e6832e878de3c0032420de97a45279ef31c1a (patch) | |
tree | 458e88881a8207093e7e6e6cb892650788e82edc /source/blender/draw/modes | |
parent | 813694e07b57e45ae3e4e2b707932fac73cab217 (diff) |
Fix T62814: Camera frame invisible with large near-clip value
Diffstat (limited to 'source/blender/draw/modes')
-rw-r--r-- | source/blender/draw/modes/object_mode.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c index 6a4e459ef56..82a660dfd5f 100644 --- a/source/blender/draw/modes/object_mode.c +++ b/source/blender/draw/modes/object_mode.c @@ -1853,6 +1853,21 @@ static void DRW_shgroup_camera(OBJECT_ShadingGroupList *sgl, Object *ob, ViewLay BKE_camera_view_frame_ex(scene, cam, cam->drawsize, false, scale, asp, shift, &drawsize, vec); + if (look_through) { + /* Ensure the frame isn't behind the near clipping plane, T62814. */ + float fac = (cam->clip_start + 0.1f) / -vec[0][2]; + if (fac > 1.0f) { + for (uint i = 0; i < 4; i++) { + if (rv3d->is_persp) { + mul_v3_fl(vec[i], fac); + } + else { + vec[i][2] *= fac; + } + } + } + } + /* Frame coords */ copy_v2_v2(cam->runtime.drw_corners[0][0], vec[0]); copy_v2_v2(cam->runtime.drw_corners[0][1], vec[1]); |