feat(renderer): Implement closeStatic method in rendering classes for resource management
This commit is contained in:
@@ -8,7 +8,9 @@ import java.awt.image.BufferedImage;
|
|||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.locks.Lock;
|
import java.util.concurrent.locks.Lock;
|
||||||
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
||||||
@@ -41,6 +43,10 @@ public class G2DRenderer implements Renderer {
|
|||||||
|
|
||||||
private final RingBuffer<Integer> fpsHistory = new RingBuffer<>(90);
|
private final RingBuffer<Integer> fpsHistory = new RingBuffer<>(90);
|
||||||
|
|
||||||
|
private final Set<Class<? extends RenderingBo>> releasedBoClasses = new HashSet<>();
|
||||||
|
|
||||||
|
private final StringBuilder fpsStringBuilder = new StringBuilder(15);
|
||||||
|
|
||||||
private volatile G2DMainFrame mainFrame;
|
private volatile G2DMainFrame mainFrame;
|
||||||
|
|
||||||
private RendererData rendererData;
|
private RendererData rendererData;
|
||||||
@@ -187,13 +193,13 @@ public class G2DRenderer implements Renderer {
|
|||||||
screenGraphics.dispose();
|
screenGraphics.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.releasedBoClasses.clear();
|
||||||
for (final RenderingBo renderingBO : renderingBOs) {
|
for (final RenderingBo renderingBO : renderingBOs) {
|
||||||
|
if (this.releasedBoClasses.add(renderingBO.getClass()) && renderingBO instanceof final G2DAbstractRenderingBo g2dRenderingBo) {
|
||||||
|
g2dRenderingBo.closeStatic();
|
||||||
|
}
|
||||||
this.rendererData.getRenderingBoPool().release(renderingBO);
|
this.rendererData.getRenderingBoPool().release(renderingBO);
|
||||||
}
|
}
|
||||||
// TODO discover with marker interface
|
|
||||||
G2DDrawControl.closeStatic();
|
|
||||||
G2DDrawImage.closeStatic();
|
|
||||||
G2DDrawControlTooltip.closeStatic();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (takeScreenshot_) {
|
if (takeScreenshot_) {
|
||||||
@@ -224,14 +230,14 @@ public class G2DRenderer implements Renderer {
|
|||||||
|
|
||||||
// FPS
|
// FPS
|
||||||
|
|
||||||
final var sb = new StringBuilder(15);
|
fpsStringBuilder.setLength(0);
|
||||||
sb.append(this.fps);
|
fpsStringBuilder.append(this.fps);
|
||||||
sb.append("fps ");
|
fpsStringBuilder.append("fps ");
|
||||||
sb.append(this.frameDur);
|
fpsStringBuilder.append(this.frameDur);
|
||||||
sb.append("ms");
|
fpsStringBuilder.append("ms");
|
||||||
|
|
||||||
final var drawFont = this.rendererData.getRenderingBoPool().acquire(DrawFontRenderingBo.class)
|
final var drawFont = this.rendererData.getRenderingBoPool().acquire(DrawFontRenderingBo.class)
|
||||||
.setText(sb.toString())
|
.setText(fpsStringBuilder.toString())
|
||||||
.setSize(14)
|
.setSize(14)
|
||||||
.setColor(RgbaColor.WHITE)
|
.setColor(RgbaColor.WHITE)
|
||||||
.setLayer(RenderingBoLayer.TOP)
|
.setLayer(RenderingBoLayer.TOP)
|
||||||
|
|||||||
@@ -17,4 +17,7 @@ public abstract class G2DAbstractRenderingBo extends AbstractRenderingBo {
|
|||||||
|
|
||||||
public abstract void render(Graphics2D graphics, double scaleFactor, boolean force);
|
public abstract void render(Graphics2D graphics, double scaleFactor, boolean force);
|
||||||
|
|
||||||
|
public void closeStatic() {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
|
||||||
|
|
||||||
import org.springframework.context.annotation.Conditional;
|
import org.springframework.context.annotation.Conditional;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -125,7 +127,8 @@ public class G2DDrawImage extends G2DAbstractRenderingBo implements DrawImageRen
|
|||||||
this.scaledY = 0;
|
this.scaledY = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void closeStatic() {
|
@Override
|
||||||
|
public void closeStatic() {
|
||||||
final var it = IMAGE_CACHE.values().iterator();
|
final var it = IMAGE_CACHE.values().iterator();
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
final var cachedImage = it.next();
|
final var cachedImage = it.next();
|
||||||
|
|||||||
@@ -90,7 +90,8 @@ public class G2DDrawWindow2 extends G2DAbstractRenderingBo implements DrawWindow
|
|||||||
this.awtColor = null;
|
this.awtColor = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void closeStatic() {
|
@Override
|
||||||
|
public void closeStatic() {
|
||||||
final var it = CACHE.values().iterator();
|
final var it = CACHE.values().iterator();
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
final var entry = it.next();
|
final var entry = it.next();
|
||||||
|
|||||||
@@ -329,7 +329,8 @@ public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRen
|
|||||||
this.tooltip = null;
|
this.tooltip = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void closeStatic() {
|
@Override
|
||||||
|
public void closeStatic() {
|
||||||
final var it = CACHED_CONTROLS.values().iterator();
|
final var it = CACHED_CONTROLS.values().iterator();
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
final var control = it.next();
|
final var control = it.next();
|
||||||
|
|||||||
@@ -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());
|
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;
|
TOOLTIP = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user