From 0b414a22c9de3eeafad99118f58f9bfe8611d7bf Mon Sep 17 00:00:00 2001 From: drdev Date: Sat, 2 Aug 2014 15:18:25 +0000 Subject: [PATCH] Support delay loading images --- forge-gui-mobile/src/forge/Forge.java | 2 ++ .../src/forge/assets/ImageCache.java | 22 +++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index b566dcc33f0..59dbd148fc0 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -13,6 +13,7 @@ import com.badlogic.gdx.utils.Clipboard; import forge.assets.AssetsDownloader; import forge.assets.FSkin; import forge.assets.FSkinFont; +import forge.assets.ImageCache; import forge.error.BugReporter; import forge.error.ExceptionHandler; import forge.model.FModel; @@ -205,6 +206,7 @@ public class Forge implements ApplicationListener { @Override public void render() { try { + ImageCache.allowSingleLoad(); Animation.advanceAll(); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // Clear the screen. diff --git a/forge-gui-mobile/src/forge/assets/ImageCache.java b/forge-gui-mobile/src/forge/assets/ImageCache.java index a27dc9cc50f..c40c95b3006 100644 --- a/forge-gui-mobile/src/forge/assets/ImageCache.java +++ b/forge-gui-mobile/src/forge/assets/ImageCache.java @@ -58,6 +58,12 @@ public class ImageCache { private static final LoadingCache cache = CacheBuilder.newBuilder().softValues().build(new ImageLoader()); public static final Texture defaultImage; + private static boolean imageLoaded, delayLoadRequested; + public static void allowSingleLoad() { + imageLoaded = false; //reset at the beginning of each render + delayLoadRequested = false; + } + static { Texture defImage = null; try { @@ -132,9 +138,21 @@ public class ImageCache { } // Load from file and add to cache if not found in cache initially. - Texture image; + Texture image = cache.getIfPresent(imageKey); + if (image != null) { return image; } + + if (imageLoaded) { //prevent loading more than one image each render for performance + if (!delayLoadRequested) { + //ensure images continue to load even if no input is being received + delayLoadRequested = true; + Gdx.graphics.requestRendering(); + } + return null; + } + imageLoaded = true; + try { - image = ImageCache.cache.get(imageKey); + image = cache.get(imageKey); } catch (final ExecutionException ex) { if (!(ex.getCause() instanceof NullPointerException)) {