[Bf-blender-cvs] [5993c53a6d3] master: Cleanup: GPU: Encapsulate Backface culling

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


Commit: 5993c53a6d36f4dc12910281be83021e45f76ac4
Author: Clément Foucault
Date:   Fri Jul 17 20:04:37 2020 +0200
Branches: master
https://developer.blender.org/rB5993c53a6d36f4dc12910281be83021e45f76ac4

Cleanup: GPU: Encapsulate Backface culling

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

M	source/blender/editors/gizmo_library/gizmo_draw_utils.c
M	source/blender/editors/interface/interface_draw.c
M	source/blender/gpu/GPU_state.h
M	source/blender/gpu/intern/gpu_state.c

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

diff --git a/source/blender/editors/gizmo_library/gizmo_draw_utils.c b/source/blender/editors/gizmo_library/gizmo_draw_utils.c
index 01e5a7eacfd..71a364c60d7 100644
--- a/source/blender/editors/gizmo_library/gizmo_draw_utils.c
+++ b/source/blender/editors/gizmo_library/gizmo_draw_utils.c
@@ -84,7 +84,7 @@ void wm_gizmo_geometryinfo_draw(const GizmoGeomInfo *info,
   /* We may want to re-visit this, for now disable
    * since it causes issues leaving the GL state modified. */
 #if 0
-  glEnable(GL_CULL_FACE);
+  GPU_face_culling(GPU_CULL_BACK);
   GPU_depth_test(true);
 #endif
 
@@ -92,7 +92,7 @@ void wm_gizmo_geometryinfo_draw(const GizmoGeomInfo *info,
 
 #if 0
   GPU_depth_test(false);
-  glDisable(GL_CULL_FACE);
+  GPU_face_culling(GPU_CULL_NONE);
 #endif
 
   GPU_batch_discard(batch);
diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c
index 98419b0b0ac..cc5d21c3df3 100644
--- a/source/blender/editors/interface/interface_draw.c
+++ b/source/blender/editors/interface/interface_draw.c
@@ -1783,8 +1783,7 @@ void ui_draw_but_UNITVEC(uiBut *but, const uiWidgetColors *wcol, const rcti *rec
   UI_draw_roundbox_3ub_alpha(
       true, rect->xmin, rect->ymin, rect->xmax, rect->ymax, 5.0f, wcol->inner, 255);
 
-  glCullFace(GL_BACK);
-  glEnable(GL_CULL_FACE);
+  GPU_face_culling(GPU_CULL_BACK);
 
   /* setup lights */
   ui_but_v3_get(but, light);
@@ -1809,7 +1808,7 @@ void ui_draw_but_UNITVEC(uiBut *but, const uiWidgetColors *wcol, const rcti *rec
   GPU_batch_draw(sphere);
 
   /* restore */
-  glDisable(GL_CULL_FACE);
+  GPU_face_culling(GPU_CULL_NONE);
 
   /* AA circle */
   GPUVertFormat *format = immVertexFormat();
diff --git a/source/blender/gpu/GPU_state.h b/source/blender/gpu/GPU_state.h
index e6b002f211c..0a97016e06d 100644
--- a/source/blender/gpu/GPU_state.h
+++ b/source/blender/gpu/GPU_state.h
@@ -40,6 +40,12 @@ typedef enum eGPUFilterFunction {
   GPU_LINEAR,
 } eGPUFilterFunction;
 
+typedef enum eGPUFaceCull {
+  GPU_CULL_NONE = 0, /* Culling disabled. */
+  GPU_CULL_FRONT,
+  GPU_CULL_BACK,
+} eGPUFaceCull;
+
 /* Initialize
  * - sets the default Blender opengl state, if in doubt, check
  *   the contents of this function
@@ -52,6 +58,7 @@ void GPU_blend_set_func_separate(eGPUBlendFunction src_rgb,
                                  eGPUBlendFunction dst_rgb,
                                  eGPUBlendFunction src_alpha,
                                  eGPUBlendFunction dst_alpha);
+void GPU_face_culling(eGPUFaceCull culling);
 void GPU_depth_range(float near, float far);
 void GPU_depth_test(bool enable);
 bool GPU_depth_test_enabled(void);
diff --git a/source/blender/gpu/intern/gpu_state.c b/source/blender/gpu/intern/gpu_state.c
index a339cfb8b5a..6d707161e97 100644
--- a/source/blender/gpu/intern/gpu_state.c
+++ b/source/blender/gpu/intern/gpu_state.c
@@ -78,6 +78,17 @@ void GPU_blend_set_func_separate(eGPUBlendFunction src_rgb,
                       gpu_get_gl_blendfunction(dst_alpha));
 }
 
+void GPU_face_culling(eGPUFaceCull culling)
+{
+  if (culling == GPU_CULL_NONE) {
+    glDisable(GL_CULL_FACE);
+  }
+  else {
+    glEnable(GL_CULL_FACE);
+    glCullFace((culling == GPU_CULL_FRONT) ? GL_FRONT : GL_BACK);
+  }
+}
+
 void GPU_depth_range(float near, float far)
 {
   /* glDepthRangef is only for OpenGL 4.1 or higher */



More information about the Bf-blender-cvs mailing list