diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/G2DRenderer.java b/src/main/java/de/extio/game_engine/renderer/g2d/G2DRenderer.java index 0baa2bd..6e1afa7 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/G2DRenderer.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/G2DRenderer.java @@ -8,7 +8,9 @@ import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.lang.reflect.InvocationTargetException; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; @@ -41,6 +43,10 @@ public class G2DRenderer implements Renderer { private final RingBuffer fpsHistory = new RingBuffer<>(90); + private final Set> releasedBoClasses = new HashSet<>(); + + private final StringBuilder fpsStringBuilder = new StringBuilder(15); + private volatile G2DMainFrame mainFrame; private RendererData rendererData; @@ -187,13 +193,13 @@ public class G2DRenderer implements Renderer { screenGraphics.dispose(); } + this.releasedBoClasses.clear(); for (final RenderingBo renderingBO : renderingBOs) { + if (this.releasedBoClasses.add(renderingBO.getClass()) && renderingBO instanceof final G2DAbstractRenderingBo g2dRenderingBo) { + g2dRenderingBo.closeStatic(); + } this.rendererData.getRenderingBoPool().release(renderingBO); } - // TODO discover with marker interface - G2DDrawControl.closeStatic(); - G2DDrawImage.closeStatic(); - G2DDrawControlTooltip.closeStatic(); } if (takeScreenshot_) { @@ -224,14 +230,14 @@ public class G2DRenderer implements Renderer { // FPS - final var sb = new StringBuilder(15); - sb.append(this.fps); - sb.append("fps "); - sb.append(this.frameDur); - sb.append("ms"); + fpsStringBuilder.setLength(0); + fpsStringBuilder.append(this.fps); + fpsStringBuilder.append("fps "); + fpsStringBuilder.append(this.frameDur); + fpsStringBuilder.append("ms"); final var drawFont = this.rendererData.getRenderingBoPool().acquire(DrawFontRenderingBo.class) - .setText(sb.toString()) + .setText(fpsStringBuilder.toString()) .setSize(14) .setColor(RgbaColor.WHITE) .setLayer(RenderingBoLayer.TOP) diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DAbstractRenderingBo.java b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DAbstractRenderingBo.java index aa528b5..969edce 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DAbstractRenderingBo.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DAbstractRenderingBo.java @@ -17,4 +17,7 @@ public abstract class G2DAbstractRenderingBo extends AbstractRenderingBo { public abstract void render(Graphics2D graphics, double scaleFactor, boolean force); + public void closeStatic() { + + } } diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawImage.java b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawImage.java index 76ba545..f261b04 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawImage.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawImage.java @@ -11,6 +11,8 @@ import java.util.HashMap; import java.util.Map; import javax.imageio.ImageIO; + + import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; @@ -125,7 +127,8 @@ public class G2DDrawImage extends G2DAbstractRenderingBo implements DrawImageRen this.scaledY = 0; } - public static void closeStatic() { + @Override + public void closeStatic() { final var it = IMAGE_CACHE.values().iterator(); while (it.hasNext()) { final var cachedImage = it.next(); diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawWindow2.java b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawWindow2.java index f7a6afb..f4bf852 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawWindow2.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawWindow2.java @@ -90,7 +90,8 @@ public class G2DDrawWindow2 extends G2DAbstractRenderingBo implements DrawWindow this.awtColor = null; } - public static void closeStatic() { + @Override + public void closeStatic() { final var it = CACHE.values().iterator(); while (it.hasNext()) { final var entry = it.next(); diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControl.java b/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControl.java index 2e08161..191b3d6 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControl.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControl.java @@ -329,7 +329,8 @@ public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRen this.tooltip = null; } - public static void closeStatic() { + @Override + public void closeStatic() { final var it = CACHED_CONTROLS.values().iterator(); while (it.hasNext()) { final var control = it.next(); diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControlTooltip.java b/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControlTooltip.java index 0641c36..0034118 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControlTooltip.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControlTooltip.java @@ -43,7 +43,8 @@ public class G2DDrawControlTooltip extends G2DAbstractRenderingBo { G2DDrawFont.renderText(graphics, scaleFactor, (int) ((TOOLTIP.position().getX() + 10) / scaleFactor), (int) ((TOOLTIP.position().getY() + 10) / scaleFactor), 14, TOOLTIP.text()); } - public static void closeStatic() { + @Override + public void closeStatic() { TOOLTIP = null; } }