diff --git a/source/blender/draw/intern/draw_context.cc b/source/blender/draw/intern/draw_context.cc index 1c87b5464b4..9f1cd23e668 100644 --- a/source/blender/draw/intern/draw_context.cc +++ b/source/blender/draw/intern/draw_context.cc @@ -2089,17 +2089,10 @@ void DRW_module_init() void DRW_module_exit() { - if (DRW_gpu_context_try_enable() == false) { - /* Nothing has been setup. Nothing to clear. */ - return; - } - GPU_TEXTURE_FREE_SAFE(g_select_buffer.texture_depth); GPU_FRAMEBUFFER_FREE_SAFE(g_select_buffer.framebuffer_depth_only); DRW_shaders_free(); - - DRW_gpu_context_disable(); } /** \} */ diff --git a/source/blender/render/intern/engine.cc b/source/blender/render/intern/engine.cc index 0522cdbc2a8..6146e4755dc 100644 --- a/source/blender/render/intern/engine.cc +++ b/source/blender/render/intern/engine.cc @@ -63,8 +63,14 @@ void RE_engines_exit() { RenderEngineType *type, *next; - DRW_engines_free(); - DRW_module_exit(); + if (DRW_gpu_context_try_enable()) { + /* Clean resources if the DRW context exists. + * We need a context bound even when dealing with non context dependent GPU resources, + * since GL functions may be null otherwise (See #141233). */ + DRW_engines_free(); + DRW_module_exit(); + DRW_gpu_context_disable(); + } for (type = static_cast(R_engines.first); type; type = next) { next = type->next;