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.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<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 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)
|
||||
|
||||
@@ -17,4 +17,7 @@ public abstract class G2DAbstractRenderingBo extends AbstractRenderingBo {
|
||||
|
||||
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 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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user