[Bf-blender-cvs] [14c53c5018a] master: BGL: fix issues with addons using BGL at startup

Clément Foucault noreply at git.blender.org
Fri Oct 9 16:34:07 CEST 2020


Commit: 14c53c5018abaa1ab05f1821cdb1b2e0b7824d21
Author: Clément Foucault
Date:   Fri Oct 9 16:33:24 2020 +0200
Branches: master
https://developer.blender.org/rB14c53c5018abaa1ab05f1821cdb1b2e0b7824d21

BGL: fix issues with addons using BGL at startup

This was an issue for Cycles.

This also makes the `GPU_bgl*` functions less fragile by checking for
null pointers.

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

M	source/blender/gpu/intern/gpu_state.cc
M	source/blender/python/intern/bpy.c

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

diff --git a/source/blender/gpu/intern/gpu_state.cc b/source/blender/gpu/intern/gpu_state.cc
index 44cc11155bb..4bdd49cb210 100644
--- a/source/blender/gpu/intern/gpu_state.cc
+++ b/source/blender/gpu/intern/gpu_state.cc
@@ -329,22 +329,28 @@ void GPU_apply_state(void)
 
 void GPU_bgl_start(void)
 {
-  StateManager &state_manager = *(Context::get()->state_manager);
-  if (state_manager.use_bgl == false) {
-    /* Expected by many addons (see T80169, T81289).
-     * This will reset the blend function. */
-    GPU_blend(GPU_BLEND_NONE);
-    state_manager.apply_state();
-    state_manager.use_bgl = true;
+  Context *ctx = Context::get();
+  if (ctx && ctx->state_manager) {
+    StateManager &state_manager = *(Context::get()->state_manager);
+    if (state_manager.use_bgl == false) {
+      /* Expected by many addons (see T80169, T81289).
+       * This will reset the blend function. */
+      GPU_blend(GPU_BLEND_NONE);
+      state_manager.apply_state();
+      state_manager.use_bgl = true;
+    }
   }
 }
 
 void GPU_bgl_end(void)
 {
-  StateManager &state_manager = *(Context::get()->state_manager);
-  state_manager.use_bgl = false;
-  /* Resync state tracking. */
-  state_manager.force_state();
+  Context *ctx = Context::get();
+  if (ctx && ctx->state_manager) {
+    StateManager &state_manager = *ctx->state_manager;
+    state_manager.use_bgl = false;
+    /* Resync state tracking. */
+    state_manager.force_state();
+  }
 }
 
 bool GPU_bgl_get(void)
diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c
index de8fd87db58..a4a73d2aa75 100644
--- a/source/blender/python/intern/bpy.c
+++ b/source/blender/python/intern/bpy.c
@@ -35,6 +35,8 @@
 #include "RNA_access.h"
 #include "RNA_types.h"
 
+#include "GPU_state.h"
+
 #include "bpy.h"
 #include "bpy_app.h"
 #include "bpy_capi_utils.h"
@@ -330,6 +332,9 @@ static PyMethodDef meth_bpy_escape_identifier = {
 static PyObject *bpy_import_test(const char *modname)
 {
   PyObject *mod = PyImport_ImportModuleLevel(modname, NULL, NULL, NULL, 0);
+
+  GPU_bgl_end();
+
   if (mod) {
     Py_DECREF(mod);
   }



More information about the Bf-blender-cvs mailing list