diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2020-10-09 18:00:00 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2020-10-09 18:00:10 +0300 |
commit | 2d94b0d6b062ecdaa1fb8553073cc4d80699ea0e (patch) | |
tree | 4365e5925fb0d8c9ec7dd5e581645ddd7e7a544c /source/blender/gpu/intern | |
parent | 16ca29527883d6bc6fcdaacfe063d74dc51d03c2 (diff) |
GPU: Add more safeguard for BGL calls
This makes sure no BGL call before window drawing locks the GPUState.
Diffstat (limited to 'source/blender/gpu/intern')
-rw-r--r-- | source/blender/gpu/intern/gpu_state.cc | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/source/blender/gpu/intern/gpu_state.cc b/source/blender/gpu/intern/gpu_state.cc index 4bdd49cb210..d0048ab9b87 100644 --- a/source/blender/gpu/intern/gpu_state.cc +++ b/source/blender/gpu/intern/gpu_state.cc @@ -330,23 +330,28 @@ void GPU_apply_state(void) void GPU_bgl_start(void) { 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; - } + if (!(ctx && ctx->state_manager)) { + return; + } + 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; } } +/* Just turn off the bgl safeguard system. Can be called even without GPU_bgl_start. */ void GPU_bgl_end(void) { Context *ctx = Context::get(); - if (ctx && ctx->state_manager) { - StateManager &state_manager = *ctx->state_manager; + if (!(ctx && ctx->state_manager)) { + return; + } + StateManager &state_manager = *ctx->state_manager; + if (state_manager.use_bgl == true) { state_manager.use_bgl = false; /* Resync state tracking. */ state_manager.force_state(); |