diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2020-10-09 17:33:24 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2020-10-09 17:33:59 +0300 |
commit | 14c53c5018abaa1ab05f1821cdb1b2e0b7824d21 (patch) | |
tree | 5f844203321a642e2e23f77b7634e63f88a918cf | |
parent | d39043b5ae054510e3683b63cfefde76e5a4c6db (diff) |
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.
-rw-r--r-- | source/blender/gpu/intern/gpu_state.cc | 28 | ||||
-rw-r--r-- | source/blender/python/intern/bpy.c | 5 |
2 files changed, 22 insertions, 11 deletions
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); } |