From e45fce3e67c10207c12422c1cc4cad2b5ffba19c Mon Sep 17 00:00:00 2001 From: Hiren Kangad Date: Tue, 10 Mar 2026 19:41:50 +0530 Subject: [PATCH] =?UTF-8?q?fix:=20harden=20GIF=20support=20=E2=80=94=20ref?= =?UTF-8?q?-counted=20sources,=20defensive=20detection,=20play=20budget?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Move GIF loading behind TextureManager.loadGif/releaseGif with ref-counting (fixes shared-source invalidation on duplicate GIFs) 2. Strip query strings/fragments before .gif extension check 3. GIFs now load paused — separate MAX_PLAYING_GIFS=8 budget in culling system, only nearest N animate (others show static frame) --- frontend/src/canvas/PixiCanvas.tsx | 19 ++++++- frontend/src/canvas/SceneManager.ts | 14 ++++- frontend/src/canvas/TextureManager.ts | 53 ++++++++++++++++++- .../src/canvas/sprites/AnimatedGifSprite.ts | 51 +++++++++++++----- 4 files changed, 122 insertions(+), 15 deletions(-) diff --git a/frontend/src/canvas/PixiCanvas.tsx b/frontend/src/canvas/PixiCanvas.tsx index 670df45..526e983 100644 --- a/frontend/src/canvas/PixiCanvas.tsx +++ b/frontend/src/canvas/PixiCanvas.tsx @@ -176,6 +176,7 @@ const PixiCanvas = forwardRef( // Distance-based priority: nearest to viewport center get resources first. const MAX_LOADED_TEXTURES = 60; // max image textures in GPU + const MAX_PLAYING_GIFS = 8; // max GIFs actively animating const MAX_INITIALIZED_VIDEOS = 6; // max