From 97a9eef32c5aed825335cc139c0a910e944b00fc Mon Sep 17 00:00:00 2001 From: "Enzo Persillet (Tutez)" Date: Mon, 23 Mar 2026 19:37:14 +0100 Subject: [PATCH 1/2] Decode bundle images on demand --- src/lime/utils/AssetLibrary.hx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/lime/utils/AssetLibrary.hx b/src/lime/utils/AssetLibrary.hx index 782bd4a433..b6a2362774 100644 --- a/src/lime/utils/AssetLibrary.hx +++ b/src/lime/utils/AssetLibrary.hx @@ -273,6 +273,13 @@ class AssetLibrary { return cachedImages.get(id); } + else if (cachedBytes.exists(id)) + { + var image = Image.fromBytes(cachedBytes.get(id)); + cachedBytes.remove(id); + cachedImages.set(id, image); + return image; + } else if (classTypes.exists(id)) { #if flash @@ -341,7 +348,7 @@ class AssetLibrary || cachedAudioBuffers.exists(id) || cachedFonts.exists(id); case IMAGE: - cachedImages.exists(id); + cachedImages.exists(id) || cachedBytes.exists(id); case MUSIC, SOUND: cachedAudioBuffers.exists(id); @@ -692,7 +699,7 @@ class AssetLibrary { #if !web case IMAGE: - cachedImages.set(id, Image.fromBytes(data)); + cachedBytes.set(id, data); case MUSIC, SOUND: cachedAudioBuffers.set(id, AudioBuffer.fromBytes(data)); case FONT: From 72665562fcce3910ca8948f0884556f5df55b07d Mon Sep 17 00:00:00 2001 From: "Enzo Persillet (Tutez)" Date: Sat, 18 Apr 2026 05:19:12 +0200 Subject: [PATCH 2/2] Use dedicated cache for on-demand bundle image bytes --- src/lime/utils/AssetLibrary.hx | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/lime/utils/AssetLibrary.hx b/src/lime/utils/AssetLibrary.hx index b6a2362774..e91e2f3a20 100644 --- a/src/lime/utils/AssetLibrary.hx +++ b/src/lime/utils/AssetLibrary.hx @@ -32,6 +32,7 @@ class AssetLibrary @:noCompletion private var cachedAudioBuffers = new Map(); @:noCompletion private var cachedBytes = new Map(); @:noCompletion private var cachedFonts = new Map(); + @:noCompletion private var cachedImageBytes = new Map(); @:noCompletion private var cachedImages = new Map(); @:noCompletion private var cachedText = new Map(); @:noCompletion private var classTypes = new Map>(); @@ -273,10 +274,10 @@ class AssetLibrary { return cachedImages.get(id); } - else if (cachedBytes.exists(id)) + else if (cachedImageBytes.exists(id)) { - var image = Image.fromBytes(cachedBytes.get(id)); - cachedBytes.remove(id); + var image = Image.fromBytes(cachedImageBytes.get(id)); + cachedImageBytes.remove(id); cachedImages.set(id, image); return image; } @@ -344,11 +345,11 @@ class AssetLibrary return switch (cast(type, AssetType)) { case null: - cachedBytes.exists(id) || cachedText.exists(id) || cachedImages.exists(id) + cachedBytes.exists(id) || cachedText.exists(id) || cachedImageBytes.exists(id) || cachedImages.exists(id) || cachedAudioBuffers.exists(id) || cachedFonts.exists(id); case IMAGE: - cachedImages.exists(id) || cachedBytes.exists(id); + cachedImages.exists(id) || cachedImageBytes.exists(id); case MUSIC, SOUND: cachedAudioBuffers.exists(id); @@ -575,11 +576,11 @@ class AssetLibrary { return Future.withValue(Type.createInstance(classTypes.get(id), [])); } - else if (cachedBytes.exists(id)) + else if (cachedImageBytes.exists(id)) { - return Image.loadFromBytes(cachedBytes.get(id)).then(function(image) + return Image.loadFromBytes(cachedImageBytes.get(id)).then(function(image) { - cachedBytes.remove(id); + cachedImageBytes.remove(id); cachedImages.set(id, image); return Future.withValue(image); }); @@ -623,12 +624,14 @@ class AssetLibrary #if haxe4 cachedBytes.clear(); cachedFonts.clear(); + cachedImageBytes.clear(); cachedImages.clear(); cachedAudioBuffers.clear(); cachedText.clear(); #else cachedBytes = new Map(); cachedFonts = new Map(); + cachedImageBytes = new Map(); cachedImages = new Map(); cachedText = new Map(); classTypes = new Map>(); @@ -699,7 +702,7 @@ class AssetLibrary { #if !web case IMAGE: - cachedBytes.set(id, data); + cachedImageBytes.set(id, data); case MUSIC, SOUND: cachedAudioBuffers.set(id, AudioBuffer.fromBytes(data)); case FONT: