Cleanup: Put GPU_state_init inside gpu_state.c
authorClément Foucault <foucault.clem@gmail.com>
Fri, 15 May 2020 12:29:27 +0000 (14:29 +0200)
committerClément Foucault <foucault.clem@gmail.com>
Mon, 18 May 2020 13:27:29 +0000 (15:27 +0200)
Also put glDisable(GL_DITHER) in it since we don't even use it (but is
enabled by default).

Also leave GL_MULTISAMPLE on by default since it has no impact on non-MSAA
framebuffers.

source/blender/draw/engines/select/select_engine.c
source/blender/draw/intern/draw_manager.c
source/blender/gpu/GPU_draw.h
source/blender/gpu/GPU_state.h
source/blender/gpu/intern/gpu_draw.c
source/blender/gpu/intern/gpu_framebuffer.c
source/blender/gpu/intern/gpu_state.c
source/blender/windowmanager/intern/wm_window.c

index 08ec0038755702f32101c4d127d4192de069268a..bb7c947a0b9b41ad5e57cc95290e2a84a4781d58 100644 (file)
@@ -307,9 +307,6 @@ static void select_draw_scene(void *vedata)
     return;
   }
 
-  /* dithering and AA break color coding, so disable */
-  glDisable(GL_DITHER);
-
   DRW_view_set_active(stl->g_data->view_faces);
 
   if (!DRW_pass_is_empty(psl->depth_only_pass)) {
index 639c62e5e443a67c75320e0b0cef5a641ad9bdd2..970578c7438a3ae561cf7de7503be09fe5b21285 100644 (file)
 #include "ED_space_api.h"
 #include "ED_view3d.h"
 
-#include "GPU_draw.h"
 #include "GPU_extensions.h"
 #include "GPU_framebuffer.h"
 #include "GPU_immediate.h"
 #include "GPU_matrix.h"
+#include "GPU_state.h"
 #include "GPU_uniformbuffer.h"
 #include "GPU_viewport.h"
 
index e5a6a8ffde858fc7f11a57f5753c7f9eb4ada795..3fb482920004f19cb2cd23a221582d2ac547099d 100644 (file)
@@ -39,13 +39,6 @@ struct Main;
 
 /* OpenGL drawing functions related to shading. */
 
-/* Initialize
- * - sets the default Blender opengl state, if in doubt, check
- *   the contents of this function
- * - this is called when starting Blender, for opengl rendering. */
-
-void GPU_state_init(void);
-
 /* Mipmap settings
  * - these will free textures on changes */
 
index 9ce91d31d697c97ddff33ebc1ad9f01d3d3250f2..4daf3f8dba527bc6aa5cc41c23a2a19f5456aed1 100644 (file)
@@ -40,6 +40,12 @@ typedef enum eGPUFilterFunction {
   GPU_LINEAR,
 } eGPUFilterFunction;
 
+/* Initialize
+ * - sets the default Blender opengl state, if in doubt, check
+ *   the contents of this function
+ * - this is called when starting Blender, for opengl rendering. */
+void GPU_state_init(void);
+
 void GPU_blend(bool enable);
 void GPU_blend_set_func(eGPUBlendFunction sfactor, eGPUBlendFunction dfactor);
 void GPU_blend_set_func_separate(eGPUBlendFunction src_rgb,
index 5f3822c794e4ccffc667ca62ccd3445011eb2f11..7871907a7d47402032b9cabcdb883c4549e7f4d4 100644 (file)
@@ -1481,66 +1481,3 @@ void GPU_free_images_old(Main *bmain)
     ima = ima->id.next;
   }
 }
-
-static void gpu_disable_multisample(void)
-{
-#ifdef __linux__
-  /* changing multisample from the default (enabled) causes problems on some
-   * systems (NVIDIA/Linux) when the pixel format doesn't have a multisample buffer */
-  bool toggle_ok = true;
-
-  if (GPU_type_matches(GPU_DEVICE_NVIDIA, GPU_OS_UNIX, GPU_DRIVER_ANY)) {
-    int samples = 0;
-    glGetIntegerv(GL_SAMPLES, &samples);
-
-    if (samples == 0) {
-      toggle_ok = false;
-    }
-  }
-
-  if (toggle_ok) {
-    glDisable(GL_MULTISAMPLE);
-  }
-#else
-  glDisable(GL_MULTISAMPLE);
-#endif
-}
-
-/* Default OpenGL State
- *
- * This is called on startup, for opengl offscreen render.
- * Generally we should always return to this state when
- * temporarily modifying the state for drawing, though that are (undocumented)
- * exceptions that we should try to get rid of. */
-
-void GPU_state_init(void)
-{
-  GPU_program_point_size(false);
-
-  glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS);
-
-  glDepthFunc(GL_LEQUAL);
-
-  glDisable(GL_BLEND);
-  glDisable(GL_DEPTH_TEST);
-  glDisable(GL_COLOR_LOGIC_OP);
-  glDisable(GL_STENCIL_TEST);
-
-  glDepthRange(0.0, 1.0);
-
-  glFrontFace(GL_CCW);
-  glCullFace(GL_BACK);
-  glDisable(GL_CULL_FACE);
-
-  gpu_disable_multisample();
-
-  /* This is a bit dangerous since addons could change this. */
-  glEnable(GL_PRIMITIVE_RESTART);
-  glPrimitiveRestartIndex((GLuint)0xFFFFFFFF);
-
-  /* TODO: Should become default. But needs at least GL 4.3 */
-  if (GLEW_ARB_ES3_compatibility) {
-    /* Takes predecence over GL_PRIMITIVE_RESTART */
-    glEnable(GL_PRIMITIVE_RESTART_FIXED_INDEX);
-  }
-}
index e6092b55fc40509ba84398a3570bf75d9f5d8304..5af9364b92c095c05113482c5aeac3d1f9b9ff2f 100644 (file)
@@ -541,10 +541,6 @@ void GPU_framebuffer_bind(GPUFrameBuffer *fb)
   }
 #endif
 
-  if (fb->multisample) {
-    glEnable(GL_MULTISAMPLE);
-  }
-
   glViewport(0, 0, fb->width, fb->height);
 }
 
index d6f044a79e3c3bc9e708a0c26d534e006c87a481..908f5fa57715278274a5f002ca7d2202179d74f7 100644 (file)
@@ -370,4 +370,44 @@ void gpuPopAttr(void)
 #undef Attr
 #undef AttrStack
 
+/* Default OpenGL State
+ *
+ * This is called on startup, for opengl offscreen render.
+ * Generally we should always return to this state when
+ * temporarily modifying the state for drawing, though that are (undocumented)
+ * exceptions that we should try to get rid of. */
+
+void GPU_state_init(void)
+{
+  GPU_program_point_size(false);
+
+  glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS);
+
+  glDisable(GL_BLEND);
+  glDisable(GL_DEPTH_TEST);
+  glDisable(GL_COLOR_LOGIC_OP);
+  glDisable(GL_STENCIL_TEST);
+  glDisable(GL_DITHER);
+
+  glDepthFunc(GL_LEQUAL);
+  glDepthRange(0.0, 1.0);
+
+  glFrontFace(GL_CCW);
+  glCullFace(GL_BACK);
+  glDisable(GL_CULL_FACE);
+
+  /* Is default but better be explicit. */
+  glEnable(GL_MULTISAMPLE);
+
+  /* This is a bit dangerous since addons could change this. */
+  glEnable(GL_PRIMITIVE_RESTART);
+  glPrimitiveRestartIndex((GLuint)0xFFFFFFFF);
+
+  /* TODO: Should become default. But needs at least GL 4.3 */
+  if (GLEW_ARB_ES3_compatibility) {
+    /* Takes predecence over GL_PRIMITIVE_RESTART */
+    glEnable(GL_PRIMITIVE_RESTART_FIXED_INDEX);
+  }
+}
+
 /** \} */
index b1eee7509b7b63b73a320dd6ea1460397da95930..70601ae5e42ea69d97ae4d199af31ced19cdd384 100644 (file)
 #include "GPU_batch.h"
 #include "GPU_batch_presets.h"
 #include "GPU_context.h"
-#include "GPU_draw.h"
 #include "GPU_framebuffer.h"
 #include "GPU_immediate.h"
 #include "GPU_init_exit.h"
 #include "GPU_platform.h"
+#include "GPU_state.h"
 
 #include "UI_resources.h"