[Bf-blender-cvs] [1d02d34] master: Fix T45434: GPencil on editmode surface fails

Campbell Barton noreply at git.blender.org
Tue Jul 21 03:20:33 CEST 2015


Commit: 1d02d34de913e61698cf3d61d0538645140fcf87
Author: Campbell Barton
Date:   Tue Jul 21 11:12:39 2015 +1000
Branches: master
https://developer.blender.org/rB1d02d34de913e61698cf3d61d0538645140fcf87

Fix T45434: GPencil on editmode surface fails

Z-offset use for drawing & picking was problematic for extracting locations from depth values.

Use flag to optionally disable.

===================================================================

M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/editors/space_view3d/view3d_view.c
M	source/blender/makesdna/DNA_view3d_types.h

===================================================================

diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index d13dd31..3e5374f 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 9e16dc0..e111a47 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 a051659..0ba6c4d 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)




More information about the Bf-blender-cvs mailing list