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>2019-03-22 09:27:39 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-03-22 09:28:53 +0300
commit6e7e6832e878de3c0032420de97a45279ef31c1a (patch)
tree458e88881a8207093e7e6e6cb892650788e82edc /source/blender/draw/modes
parent813694e07b57e45ae3e4e2b707932fac73cab217 (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.c15
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]);