diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2020-10-09 16:12:28 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2020-10-09 17:33:59 +0300 |
commit | d39043b5ae054510e3683b63cfefde76e5a4c6db (patch) | |
tree | 21d7b63cf0eeec6964b48cb6836cfd611add5f02 /source/blender/gpu/intern | |
parent | 1f6b7387ad0177c1dec9bb83b7c7586a454691db (diff) |
Revert "Revert "BGL: Workaround broken bgl usage caused by GPU refactor""
This reverts commit f23bf4cb109cb8f39f873c4f80acbec3f33b098c.
Diffstat (limited to 'source/blender/gpu/intern')
-rw-r--r-- | source/blender/gpu/intern/gpu_state.cc | 35 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_state_private.hh | 1 |
2 files changed, 33 insertions, 3 deletions
diff --git a/source/blender/gpu/intern/gpu_state.cc b/source/blender/gpu/intern/gpu_state.cc index 44ad9cc9a84..44cc11155bb 100644 --- a/source/blender/gpu/intern/gpu_state.cc +++ b/source/blender/gpu/intern/gpu_state.cc @@ -317,10 +317,39 @@ void GPU_apply_state(void) Context::get()->state_manager->apply_state(); } -/* Will set all the states regardless of the current ones. */ -void GPU_force_state(void) +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name BGL workaround + * + * bgl makes direct GL calls that makes our state tracking out of date. + * This flag make it so that the pyGPU calls will not override the state set by + * bgl functions. + * \{ */ + +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; + } +} + +void GPU_bgl_end(void) +{ + StateManager &state_manager = *(Context::get()->state_manager); + state_manager.use_bgl = false; + /* Resync state tracking. */ + state_manager.force_state(); +} + +bool GPU_bgl_get(void) { - Context::get()->state_manager->force_state(); + return Context::get()->state_manager->use_bgl; } /** \} */ diff --git a/source/blender/gpu/intern/gpu_state_private.hh b/source/blender/gpu/intern/gpu_state_private.hh index d93556a1058..db1747127d4 100644 --- a/source/blender/gpu/intern/gpu_state_private.hh +++ b/source/blender/gpu/intern/gpu_state_private.hh @@ -153,6 +153,7 @@ class StateManager { public: GPUState state; GPUStateMutable mutable_state; + bool use_bgl = false; public: StateManager(); |