diff options
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw.c | 8 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_view.c | 8 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_view3d_types.h | 5 |
3 files changed, 18 insertions, 3 deletions
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index d13dd31576d..3e5374f7d31 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2397,7 +2397,9 @@ void ED_view3d_draw_depth(Scene *scene, ARegion *ar, View3D *v3d, bool alphaover if (rv3d->rflag & RV3D_CLIPPING) { ED_view3d_clipping_set(rv3d); } - + /* get surface depth without bias */ + rv3d->rflag |= RV3D_ZOFFSET_DISABLED; + v3d->zbuf = true; glEnable(GL_DEPTH_TEST); @@ -2482,8 +2484,10 @@ void ED_view3d_draw_depth(Scene *scene, ARegion *ar, View3D *v3d, bool alphaover glDepthMask(mask_orig); } - if (rv3d->rflag & RV3D_CLIPPING) + if (rv3d->rflag & RV3D_CLIPPING) { ED_view3d_clipping_disable(); + } + rv3d->rflag &= ~RV3D_ZOFFSET_DISABLED; v3d->zbuf = zbuf; if (!v3d->zbuf) glDisable(GL_DEPTH_TEST); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 9e16dc030b5..e111a473fdf 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -785,7 +785,13 @@ bool ED_view3d_viewplane_get( */ void ED_view3d_polygon_offset(const RegionView3D *rv3d, const float dist) { - float viewdist = rv3d->dist; + float viewdist; + + if (rv3d->rflag & RV3D_ZOFFSET_DISABLED) { + return; + } + + viewdist = rv3d->dist; /* special exception for ortho camera (viewdist isnt used for perspective cameras) */ if (dist != 0.0f) { diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index a0516590d43..0ba6c4dcf01 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -268,6 +268,11 @@ typedef struct View3D { #define RV3D_NAVIGATING 8 #define RV3D_GPULIGHT_UPDATE 16 #define RV3D_IS_GAME_ENGINE 32 /* runtime flag, used to check if LoD's should be used */ +/** + * Disable zbuffer offset, skip calls to #ED_view3d_polygon_offset. + * Use when precise surface depth is needed and picking bias isn't, see T45434). + */ +#define RV3D_ZOFFSET_DISABLED 64 /* RegionView3d->viewlock */ #define RV3D_LOCKED (1 << 0) |