diff --git a/core/src/net/sf/openrocket/gui/figure3d/RealisticRenderStrategy.java b/core/src/net/sf/openrocket/gui/figure3d/RealisticRenderStrategy.java index 5dfa4fda8..e9f1d39c4 100644 --- a/core/src/net/sf/openrocket/gui/figure3d/RealisticRenderStrategy.java +++ b/core/src/net/sf/openrocket/gui/figure3d/RealisticRenderStrategy.java @@ -9,6 +9,7 @@ import java.util.Map; import javax.media.opengl.GL; import javax.media.opengl.GL2; import javax.media.opengl.GL2ES1; +import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLProfile; import javax.media.opengl.fixedfunc.GLLightingFunc; import javax.media.opengl.fixedfunc.GLMatrixFunc; @@ -35,10 +36,22 @@ public class RealisticRenderStrategy extends RenderStrategy { private Map texCache = new HashMap(); @Override - public void clearCaches() { + public void updateFigure() { needClearCache = true; } + @Override + public void init(GLAutoDrawable drawable) { + oldTexCache = new HashMap(); + texCache = new HashMap(); + } + + @Override + public void dispose(GLAutoDrawable drawable) { + oldTexCache = null; + texCache = null; + } + @Override public boolean isDrawn(RocketComponent c) { return true; diff --git a/core/src/net/sf/openrocket/gui/figure3d/RenderStrategy.java b/core/src/net/sf/openrocket/gui/figure3d/RenderStrategy.java index 52c2ad0eb..e73a18405 100644 --- a/core/src/net/sf/openrocket/gui/figure3d/RenderStrategy.java +++ b/core/src/net/sf/openrocket/gui/figure3d/RenderStrategy.java @@ -1,6 +1,7 @@ package net.sf.openrocket.gui.figure3d; import javax.media.opengl.GL2; +import javax.media.opengl.GLAutoDrawable; import net.sf.openrocket.rocketcomponent.RocketComponent; @@ -13,8 +14,16 @@ public abstract class RenderStrategy { public abstract void postGeometry(GL2 gl, RocketComponent c, float alpha); - public void clearCaches() { + public void updateFigure() { } + + public void init(GLAutoDrawable drawable) { + + } + + public void dispose(GLAutoDrawable drawable) { + + } } diff --git a/core/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java b/core/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java index 61b4241ce..6fd012f5a 100644 --- a/core/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java +++ b/core/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java @@ -375,6 +375,7 @@ public class RocketFigure3d extends JPanel implements GLEventListener { @Override public void dispose(GLAutoDrawable drawable) { log.verbose("GL - dispose() called"); + rr.dispose(drawable); } @Override diff --git a/core/src/net/sf/openrocket/gui/figure3d/RocketRenderer.java b/core/src/net/sf/openrocket/gui/figure3d/RocketRenderer.java index f99f71ccb..46c73a92f 100644 --- a/core/src/net/sf/openrocket/gui/figure3d/RocketRenderer.java +++ b/core/src/net/sf/openrocket/gui/figure3d/RocketRenderer.java @@ -39,9 +39,13 @@ public class RocketRenderer { cr = new ComponentRenderer(); cr.init(drawable); } - + + public void dispose(GLAutoDrawable drawable) { + currentStrategy.dispose(drawable); + } + public void updateFigure() { - currentStrategy.clearCaches(); + currentStrategy.updateFigure(); cr.updateFigure(); }