diff --git a/source/blender/windowmanager/intern/wm_surface.cc b/source/blender/windowmanager/intern/wm_surface.cc
index 900023f53a23d7f780d4d0b5c1a4c719e79cf501..7d2ddc415eec0334b11140409557ac9ad3b0eede 100644
--- a/source/blender/windowmanager/intern/wm_surface.cc
+++ b/source/blender/windowmanager/intern/wm_surface.cc
@@ -108,18 +108,16 @@ void wm_surface_add(wmSurface *surface)
 
 void wm_surface_remove(wmSurface *surface)
 {
-  if (surface == g_drawable) {
-    wm_surface_clear_drawable();
-  }
   BLI_remlink(&global_surface_list, surface);
+  /* Ensure GPU context is bound to free GPU resources. */
+  wm_surface_make_drawable(surface);
   surface->free_data(surface);
+  wm_surface_clear_drawable();
   MEM_freeN(surface);
 }
 
 void wm_surfaces_free()
 {
-  wm_surface_clear_drawable();
-
   LISTBASE_FOREACH_MUTABLE (wmSurface *, surf, &global_surface_list) {
     wm_surface_remove(surf);
   }