[Bf-blender-cvs] [02c09773ea0] master: Cleanup: GPU: rename bglPolygonOffset to GPU_polygon_offset

Clément Foucault noreply at git.blender.org
Sat Jul 18 03:08:14 CEST 2020


Commit: 02c09773ea07c8c0a3d7be63abdfd963a9452402
Author: Clément Foucault
Date:   Thu Jul 16 20:24:05 2020 +0200
Branches: master
https://developer.blender.org/rB02c09773ea07c8c0a3d7be63abdfd963a9452402

Cleanup: GPU: rename bglPolygonOffset to GPU_polygon_offset

And move it to GPU module.

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

M	source/blender/draw/intern/draw_common.c
M	source/blender/editors/gpencil/annotate_draw.c
M	source/blender/editors/gpencil/drawgpencil.c
M	source/blender/editors/include/BIF_glutil.h
M	source/blender/editors/screen/glutil.c
M	source/blender/editors/space_view3d/view3d_utils.c
M	source/blender/gpu/GPU_matrix.h
M	source/blender/gpu/intern/gpu_draw.c
M	source/blender/gpu/intern/gpu_matrix.c

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

diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c
index aa8dd2f7fa4..095e928aa74 100644
--- a/source/blender/draw/intern/draw_common.c
+++ b/source/blender/draw/intern/draw_common.c
@@ -22,6 +22,7 @@
 
 #include "DRW_render.h"
 
+#include "GPU_matrix.h"
 #include "GPU_shader.h"
 #include "GPU_texture.h"
 
@@ -31,8 +32,6 @@
 #include "BKE_global.h"
 #include "BKE_object.h"
 
-#include "BIF_glutil.h"
-
 #include "draw_common.h"
 
 #if 0
@@ -280,7 +279,7 @@ DRWView *DRW_view_create_with_zoffset(const DRWView *parent_view,
     viewdist = 1.0f / max_ff(fabsf(winmat[0][0]), fabsf(winmat[1][1]));
   }
 
-  winmat[3][2] -= bglPolygonOffsetCalc((float *)winmat, viewdist, offset);
+  winmat[3][2] -= GPU_polygon_offset_calc(winmat, viewdist, offset);
 
   return DRW_view_create_sub(parent_view, viewmat, winmat);
 }
diff --git a/source/blender/editors/gpencil/annotate_draw.c b/source/blender/editors/gpencil/annotate_draw.c
index 8c8e6da75c0..df479325027 100644
--- a/source/blender/editors/gpencil/annotate_draw.c
+++ b/source/blender/editors/gpencil/annotate_draw.c
@@ -53,9 +53,8 @@
 
 #include "WM_api.h"
 
-#include "BIF_glutil.h"
-
 #include "GPU_immediate.h"
+#include "GPU_matrix.h"
 #include "GPU_state.h"
 
 #include "ED_gpencil.h"
@@ -561,7 +560,7 @@ static void annotation_draw_strokes(const bGPDframe *gpf,
 
         /* first arg is normally rv3d->dist, but this isn't
          * available here and seems to work quite well without */
-        bglPolygonOffset(1.0f, 1.0f);
+        GPU_polygon_offset(1.0f, 1.0f);
       }
 
       /* 3D Lines - OpenGL primitives-based */
@@ -577,7 +576,7 @@ static void annotation_draw_strokes(const bGPDframe *gpf,
       if (no_xray) {
         GPU_depth_test(false);
 
-        bglPolygonOffset(0.0, 0.0);
+        GPU_polygon_offset(0.0f, 0.0f);
       }
     }
     else {
diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c
index 4df071c84f8..9d11c1c2a25 100644
--- a/source/blender/editors/gpencil/drawgpencil.c
+++ b/source/blender/editors/gpencil/drawgpencil.c
@@ -60,9 +60,8 @@
 
 #include "WM_api.h"
 
-#include "BIF_glutil.h"
-
 #include "GPU_immediate.h"
+#include "GPU_matrix.h"
 #include "GPU_state.h"
 
 #include "ED_gpencil.h"
@@ -353,7 +352,7 @@ static void gpencil_draw_strokes(tGPDdraw *tgpw)
 
         /* first arg is normally rv3d->dist, but this isn't
          * available here and seems to work quite well without */
-        bglPolygonOffset(1.0f, 1.0f);
+        GPU_polygon_offset(1.0f, 1.0f);
       }
 
       /* 3D Stroke */
@@ -396,7 +395,7 @@ static void gpencil_draw_strokes(tGPDdraw *tgpw)
       if (no_xray) {
         GPU_depth_test(false);
 
-        bglPolygonOffset(0.0, 0.0);
+        GPU_polygon_offset(0.0f, 0.0f);
       }
     }
     /* if only one stroke, exit from loop */
diff --git a/source/blender/editors/include/BIF_glutil.h b/source/blender/editors/include/BIF_glutil.h
index 04f9edeaf3a..1eb22fb34e2 100644
--- a/source/blender/editors/include/BIF_glutil.h
+++ b/source/blender/editors/include/BIF_glutil.h
@@ -172,13 +172,6 @@ void ED_draw_imbuf_ctx_clipping(const struct bContext *C,
 
 int ED_draw_imbuf_method(struct ImBuf *ibuf);
 
-/* OpenGL drawing utility functions. Do not use these in new code, these
- * are intended to be moved or removed in the future. */
-
-/* own working polygon offset */
-float bglPolygonOffsetCalc(const float winmat[16], float viewdist, float dist);
-void bglPolygonOffset(float viewdist, float dist);
-
 void immDrawBorderCorners(unsigned int pos, const struct rcti *border, float zoomx, float zoomy);
 
 #ifdef __cplusplus
diff --git a/source/blender/editors/screen/glutil.c b/source/blender/editors/screen/glutil.c
index 27e5a53a526..79ec8dde009 100644
--- a/source/blender/editors/screen/glutil.c
+++ b/source/blender/editors/screen/glutil.c
@@ -473,68 +473,6 @@ void immDrawPixelsTex_clipping(IMMDrawPixelsTexState *state,
                                   color);
 }
 
-/* *************** glPolygonOffset hack ************* */
-
-float bglPolygonOffsetCalc(const float winmat[16], float viewdist, float dist)
-{
-  /* Seems like we have a factor of 2 more offset than 2.79 for some reason. Correct for this. */
-  dist *= 0.5f;
-
-  if (winmat[15] > 0.5f) {
-#if 1
-    return 0.00001f * dist * viewdist;  // ortho tweaking
-#else
-    static float depth_fac = 0.0f;
-    if (depth_fac == 0.0f) {
-      int depthbits;
-      glGetIntegerv(GL_DEPTH_BITS, &depthbits);
-      depth_fac = 1.0f / (float)((1 << depthbits) - 1);
-    }
-    offs = (-1.0 / winmat[10]) * dist * depth_fac;
-
-    UNUSED_VARS(viewdist);
-#endif
-  }
-
-  /* This adjustment effectively results in reducing the Z value by 0.25%.
-   *
-   * winmat[14] actually evaluates to `-2 * far * near / (far - near)`,
-   * is very close to -0.2 with default clip range,
-   * and is used as the coefficient multiplied by `w / z`,
-   * thus controlling the z dependent part of the depth value.
-   */
-  return winmat[14] * -0.0025f * dist;
-}
-
-/**
- * \note \a viewdist is only for ortho at the moment.
- */
-void bglPolygonOffset(float viewdist, float dist)
-{
-  static float winmat[16], offset = 0.0f;
-
-  if (dist != 0.0f) {
-    // glEnable(GL_POLYGON_OFFSET_FILL);
-    // glPolygonOffset(-1.0, -1.0);
-
-    /* hack below is to mimic polygon offset */
-    GPU_matrix_projection_get(winmat);
-
-    /* dist is from camera to center point */
-
-    float offs = bglPolygonOffsetCalc(winmat, viewdist, dist);
-
-    winmat[14] -= offs;
-    offset += offs;
-  }
-  else {
-    winmat[14] += offset;
-    offset = 0.0;
-  }
-
-  GPU_matrix_projection_set(winmat);
-}
-
 /* **** Color management helper functions for GLSL display/transform ***** */
 
 /* Draw given image buffer on a screen using GLSL for display transform */
diff --git a/source/blender/editors/space_view3d/view3d_utils.c b/source/blender/editors/space_view3d/view3d_utils.c
index 0d121b23c71..bd2323f47f4 100644
--- a/source/blender/editors/space_view3d/view3d_utils.c
+++ b/source/blender/editors/space_view3d/view3d_utils.c
@@ -220,7 +220,7 @@ void view3d_region_operator_needs_opengl(wmWindow *UNUSED(win), ARegion *region)
 }
 
 /**
- * Use instead of: ``bglPolygonOffset(rv3d->dist, ...)`` see bug [#37727]
+ * Use instead of: ``GPU_polygon_offset(rv3d->dist, ...)`` see bug [#37727]
  */
 void ED_view3d_polygon_offset(const RegionView3D *rv3d, const float dist)
 {
@@ -241,7 +241,7 @@ void ED_view3d_polygon_offset(const RegionView3D *rv3d, const float dist)
     }
   }
 
-  bglPolygonOffset(viewdist, dist);
+  GPU_polygon_offset(viewdist, dist);
 }
 
 bool ED_view3d_context_activate(bContext *C)
diff --git a/source/blender/gpu/GPU_matrix.h b/source/blender/gpu/GPU_matrix.h
index 2899fba46e4..56d640ea0e4 100644
--- a/source/blender/gpu/GPU_matrix.h
+++ b/source/blender/gpu/GPU_matrix.h
@@ -147,6 +147,10 @@ const float (*GPU_matrix_normal_inverse_get(float m[3][3]))[3];
 void GPU_matrix_bind(const struct GPUShaderInterface *);
 bool GPU_matrix_dirty_get(void); /* since last bind */
 
+/* own working polygon offset */
+float GPU_polygon_offset_calc(const float (*winmat)[4], float viewdist, float dist);
+void GPU_polygon_offset(float viewdist, float dist);
+
 /* Python API needs to be able to inspect the stack so errors raise exceptions
  * instead of crashing. */
 #ifdef USE_GPU_PY_MATRIX_API
diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c
index f07e3ed70d7..7e6d47636f6 100644
--- a/source/blender/gpu/intern/gpu_draw.c
+++ b/source/blender/gpu/intern/gpu_draw.c
@@ -55,6 +55,7 @@
 #include "GPU_draw.h"
 #include "GPU_extensions.h"
 #include "GPU_glew.h"
+#include "GPU_matrix.h"
 #include "GPU_platform.h"
 #include "GPU_texture.h"
 
diff --git a/source/blender/gpu/intern/gpu_matrix.c b/source/blender/gpu/intern/gpu_matrix.c
index 2687f56ad27..8df7c7c5d2f 100644
--- a/source/blender/gpu/intern/gpu_matrix.c
+++ b/source/blender/gpu/intern/gpu_matrix.c
@@ -738,3 +738,69 @@ int GPU_matrix_stack_level_get_projection(void)
 }
 
 /** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Polygon Offset Hack
+ *
+ * Workaround the fact that PolygonOffset is implementation dependant.
+ * We modify the projection matrix (winmat) in order to change the final depth a tiny amount.
+ * \{ */
+
+float GPU_polygon_offset_calc(const float (*winmat)[4], float viewdist, float dist)
+{
+  /* Seems like we have a factor of 2 more offset than 2.79 for some reason. Correct for this. */
+  dist *= 0.5f;
+
+  if (winmat[3][3] > 0.5f) {
+#if 1
+    return 0.00001f * dist * viewdist;  // ortho tweaking
+#else
+    static float depth_fac = 0.0f;
+    if (depth_fac == 0.0f) {
+      int depthbits;
+      glGetIntegerv(GL_DEPTH_BITS, &depthbits);
+      depth_fac = 1.0f / (float)((1 << depthbits) - 1);
+    }
+    offs = (-1.0 / winmat[2][2]) * dist * depth_fac;
+
+    UNUSED_VARS(viewdist);
+#endif
+  }
+
+  /* This adjustment effectively results in reducing the Z value by 0.25%.
+   *
+   * winmat[4][3] actually evaluates to `-2 * far * near / (far - near)`,
+   * is very close to -0.2 with default clip range,
+   * and is used as the coefficient multiplied by `w / z`,
+   * thus controlling the z dependent part of the depth value.
+   */
+  return winmat[3][2] * -0.0025f * dist;
+}
+
+/**
+ * \note \a viewdist is only for ortho at the moment.
+ */
+void GPU_polygon_offset(float viewdist, float dist)
+{
+  static float winmat[4][4], offset = 0.0f;
+
+  if (dist != 0.0f) {
+    /* hack below is to mimic polygon offset */
+    GPU_matrix_projection_get(winmat);
+
+    /* dist is from camera to center point */
+
+    float offs = GPU_polygon_offset_calc(winmat, viewdist, dist);
+
+    winmat[3][2] -= offs;
+    offset += offs;
+  }
+  else {
+    winmat[3][2] += offset;
+    offset = 0.0;
+  }
+
+  GPU_matrix_projection_set(winmat);
+}
+
+/** \} */



More information about the Bf-blender-cvs mailing list