From 35854e05c7f7f93fc953c111ba10ad815e96229f Mon Sep 17 00:00:00 2001 From: Jakub Valtar Date: Fri, 25 Sep 2015 17:48:49 -0400 Subject: [PATCH] Remove circular dependence --- core/src/processing/opengl/PGraphicsOpenGL.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/core/src/processing/opengl/PGraphicsOpenGL.java b/core/src/processing/opengl/PGraphicsOpenGL.java index 4c481e871..ae3d05456 100644 --- a/core/src/processing/opengl/PGraphicsOpenGL.java +++ b/core/src/processing/opengl/PGraphicsOpenGL.java @@ -703,13 +703,24 @@ public class PGraphicsOpenGL extends PGraphics { @Override public void setCache(PImage image, Object storage) { + if (image instanceof PGraphicsOpenGL) { + // Prevent strong reference to the key from the value by wrapping + // the Texture into WeakReference (proposed solution by WeakHashMap docs) + getPrimaryPG().cacheMap.put(image, new WeakReference<>(storage)); + return; + } getPrimaryPG().cacheMap.put(image, storage); } @Override public Object getCache(PImage image) { - return getPrimaryPG().cacheMap.get(image); + Object storage = getPrimaryPG().cacheMap.get(image); + if (storage != null && storage.getClass() == WeakReference.class) { + // Unwrap the value, use getClass() for fast check + return ((WeakReference) storage).get(); + } + return storage; }