From 94a64dcd25a1e669fc08fea2073d0d285b09f3fb Mon Sep 17 00:00:00 2001 From: pax Date: Mon, 13 Apr 2026 18:40:23 -0500 Subject: [PATCH] mpv_gl: make GL current before freeing mpv render context Drivers that enforce per-context GPU resource ownership (Mesa, Intel) leak textures and FBOs when mpv_render_context_free runs without the owning GL context current. NVIDIA tolerates this but others do not. --- booru_viewer/gui/media/mpv_gl.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/booru_viewer/gui/media/mpv_gl.py b/booru_viewer/gui/media/mpv_gl.py index e88be14..9927325 100644 --- a/booru_viewer/gui/media/mpv_gl.py +++ b/booru_viewer/gui/media/mpv_gl.py @@ -113,7 +113,15 @@ class _MpvGLWidget(QWidget): def cleanup(self) -> None: if self._ctx: - self._ctx.free() + # GL context must be current so mpv can release its textures + # and FBOs on the correct context. Without this, drivers that + # enforce per-context resource ownership (not NVIDIA, but + # Mesa/Intel) leak the GPU objects. + self._gl.makeCurrent() + try: + self._ctx.free() + finally: + self._gl.doneCurrent() self._ctx = None if self._mpv: self._mpv.terminate()