Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/gpu/intern/gpu_state.cc27
-rw-r--r--source/blender/windowmanager/intern/wm_draw.c4
2 files changed, 20 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();
diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c
index 2853481381d..a805e00e0a2 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -863,6 +863,10 @@ static void wm_draw_window(bContext *C, wmWindow *win)
{
bScreen *screen = WM_window_get_active_screen(win);
bool stereo = WM_stereo3d_enabled(win, false);
+
+ /* Avoid any BGL call issued before this to alter the window drawin. */
+ GPU_bgl_end();
+
/* Draw area regions into their own framebuffer. This way we can redraw
* the areas that need it, and blit the rest from existing framebuffers. */
wm_draw_window_offscreen(C, win, stereo);