diff options
Diffstat (limited to 'source/blender/windowmanager/intern/wm_surface.c')
-rw-r--r-- | source/blender/windowmanager/intern/wm_surface.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/source/blender/windowmanager/intern/wm_surface.c b/source/blender/windowmanager/intern/wm_surface.c index e8850693d69..12e55790259 100644 --- a/source/blender/windowmanager/intern/wm_surface.c +++ b/source/blender/windowmanager/intern/wm_surface.c @@ -53,10 +53,17 @@ void wm_surfaces_iter(bContext *C, void (*cb)(bContext *C, wmSurface *)) void wm_surface_clear_drawable(void) { if (g_drawable) { + WM_opengl_context_release(g_drawable->ghost_ctx); + GPU_context_active_set(NULL); + BLF_batch_reset(); gpu_batch_presets_reset(); immDeactivate(); + if (g_drawable->deactivate) { + g_drawable->deactivate(); + } + g_drawable = NULL; } } @@ -67,7 +74,10 @@ void wm_surface_set_drawable(wmSurface *surface, bool activate) g_drawable = surface; if (activate) { - GHOST_ActivateOpenGLContext(surface->ghost_ctx); + if (surface->activate) { + surface->activate(); + } + WM_opengl_context_activate(surface->ghost_ctx); } GPU_context_active_set(surface->gpu_ctx); @@ -109,6 +119,8 @@ void wm_surface_remove(wmSurface *surface) void wm_surfaces_free(void) { + wm_surface_clear_drawable(); + for (wmSurface *surf = global_surface_list.first, *surf_next; surf; surf = surf_next) { surf_next = surf->next; wm_surface_remove(surf); |