diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2020-10-08 17:19:42 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2020-10-08 17:36:17 +0300 |
commit | f12b0373f322b710b9fa5cebb67bdf363ff90e9f (patch) | |
tree | ccb30a6d7cd12cac94a3a7ebefa72b162f4df1b2 /source/blender/gpu/opengl/gl_state.cc | |
parent | 5f364216acd5bf0f8098b1da1cdb2e75d42d59b3 (diff) |
BGL: Workaround broken bgl usage caused by GPU refactor
This directly adress the issues caused by rB536c2e0ec916.
Since the state tracking is done at a lower level, using the bgl
functions needs to be safegarded by the state manager.
The current workaround is to bypass `apply_state` when inside a
callback that used a `bgl` function.
Related to T80730.
This fix T81003.
Also this fix the default blend equation for callbacks.
Fixes T80169 T81289.
Diffstat (limited to 'source/blender/gpu/opengl/gl_state.cc')
-rw-r--r-- | source/blender/gpu/opengl/gl_state.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/source/blender/gpu/opengl/gl_state.cc b/source/blender/gpu/opengl/gl_state.cc index cd24fa0e0e4..27c9b501add 100644 --- a/source/blender/gpu/opengl/gl_state.cc +++ b/source/blender/gpu/opengl/gl_state.cc @@ -73,13 +73,17 @@ GLStateManager::GLStateManager(void) : StateManager() void GLStateManager::apply_state(void) { - this->set_state(this->state); - this->set_mutable_state(this->mutable_state); - this->texture_bind_apply(); - this->image_bind_apply(); + if (!this->use_bgl) { + this->set_state(this->state); + this->set_mutable_state(this->mutable_state); + this->texture_bind_apply(); + this->image_bind_apply(); + } + /* This is needed by gpu_py_offscreen. */ active_fb->apply_state(); }; +/* Will set all the states regardless of the current ones. */ void GLStateManager::force_state(void) { /* Little exception for clip distances since they need to keep the old count correct. */ |