refactor(renderer): Update RendererWorkingSet to use AbstractClientModule for producer type

This commit is contained in:
extio-de
2025-12-23 14:02:55 +01:00
parent c390b24003
commit 411d4c1db2
4 changed files with 77 additions and 57 deletions

View File

@@ -19,6 +19,8 @@ import javax.imageio.ImageIO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.extio.game_engine.module.AbstractClientModule;
import de.extio.game_engine.module.AbstractClientModule;
import de.extio.game_engine.renderer.Renderer;
import de.extio.game_engine.renderer.RendererData;
import de.extio.game_engine.renderer.g2d.bo.rendering.G2DAbstractRenderingBo;
@@ -87,8 +89,8 @@ public class G2DRenderer implements Renderer {
EventQueue.invokeAndWait(() -> {
// this invokeAndWait() call is also important to wait until applyVideoOptions() has been completed, which also puts events to AWT event queue
LOGGER.debug("Viewport initialized");
this.rendererData.getRendererWorkingSet().add("G2DRenderer", this.rendererData.getRenderingBoPool().acquire("G2DRenderer_background", G2DDrawBackground.class));
this.rendererData.getRendererWorkingSet().add("G2DRenderer", this.rendererData.getRenderingBoPool().acquire("G2DRenderer_tooltip", G2DDrawControlTooltip.class));
this.rendererData.getRendererWorkingSet().add(G2DRendererModule.class, this.rendererData.getRenderingBoPool().acquire("G2DRenderer_background", G2DDrawBackground.class));
this.rendererData.getRendererWorkingSet().add(G2DRendererModule.class, this.rendererData.getRenderingBoPool().acquire("G2DRenderer_tooltip", G2DDrawControlTooltip.class));
});
}
catch (InvocationTargetException | InterruptedException e) {
@@ -152,7 +154,7 @@ public class G2DRenderer implements Renderer {
}
this.drawStatistics();
this.rendererData.getRendererWorkingSet().commit("G2DRenderer", true);
this.rendererData.getRendererWorkingSet().commit(G2DRendererModule.class, true);
this.rendererData.getRendererWorkingSet().getLiveSet(this.renderingBOs);
this.renderingBOs.sort((bo0, bo1) -> bo0.getLayer().compareTo(bo1.getLayer()));
@@ -178,8 +180,8 @@ public class G2DRenderer implements Renderer {
}
}
this.rendererData.getRendererWorkingSet().get("G2DRenderer", "G2DRenderer_tooltip").closeStatic();
this.rendererData.getRendererWorkingSet().get(G2DRendererModule.class, "G2DRenderer_tooltip").closeStatic();
//
// Rendering cycle END
//
@@ -234,14 +236,14 @@ public class G2DRenderer implements Renderer {
.setColor(RgbaColor.WHITE)
.setLayer(RenderingBoLayer.TOP)
.withPositionAbsoluteAnchorTopRight(100, 35);
this.rendererData.getRendererWorkingSet().add("G2DRenderer", drawFont);
this.rendererData.getRendererWorkingSet().add(G2DRendererModule.class, drawFont);
this.fpsHistory.add(Integer.valueOf((int) this.frameDur));
final var drawFpsHistory = this.rendererData.getRenderingBoPool().acquire("g2DRenderer_fpsHistory", G2DDrawFpsHistory.class)
.setHistory(this.fpsHistory)
.setLayer(RenderingBoLayer.TOP)
.withPositionAbsoluteAnchorTopRight(100, 50);
this.rendererData.getRendererWorkingSet().add("G2DRenderer", drawFpsHistory);
this.rendererData.getRendererWorkingSet().add(G2DRendererModule.class, drawFpsHistory);
}
private void frameCap() throws InterruptedException {
@@ -334,4 +336,7 @@ public class G2DRenderer implements Renderer {
public void setRendererData(final RendererData rendererData) {
this.rendererData = rendererData;
}
private static abstract class G2DRendererModule extends AbstractClientModule {
}
}

View File

@@ -3,19 +3,20 @@ package de.extio.game_engine.renderer.work;
import java.util.List;
import java.util.Map;
import de.extio.game_engine.module.AbstractClientModule;
import de.extio.game_engine.renderer.model.RenderingBo;
public interface RendererWorkingSet {
void add(String producer, RenderingBo work);
void add(Class<? extends AbstractClientModule> producer, RenderingBo work);
void add(String producer, List<RenderingBo> work);
void add(Class<? extends AbstractClientModule> producer, List<RenderingBo> work);
RenderingBo get(String producer, String id);
RenderingBo get(Class<? extends AbstractClientModule> producer, String id);
Map<String, RenderingBo> getUncommittedWork(String producer);
Map<String, RenderingBo> getUncommittedWork(Class<? extends AbstractClientModule> producer);
Map<String, RenderingBo> commit(String producer, boolean clone);
Map<String, RenderingBo> commit(Class<? extends AbstractClientModule> producer, boolean clone);
void getLiveSet(List<RenderingBo> combinedLiveSet);

View File

@@ -12,11 +12,12 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.atomic.AtomicReference;
import de.extio.game_engine.module.AbstractClientModule;
import de.extio.game_engine.renderer.model.RenderingBo;
public class RendererWorkingSetImpl implements RendererWorkingSet {
private final ConcurrentMap<String, RendererWork> workingSet = new ConcurrentHashMap<>();
private final ConcurrentMap<Class<? extends AbstractClientModule>, RendererWork> workingSet = new ConcurrentHashMap<>();
private final BlockingQueue<Map<String, RenderingBo>> mapsPool = new ArrayBlockingQueue<>(100);
@@ -29,14 +30,14 @@ public class RendererWorkingSetImpl implements RendererWorkingSet {
}
@Override
public void add(final String producer, final RenderingBo work) {
public void add(final Class<? extends AbstractClientModule> producer, final RenderingBo work) {
this.getWorkingSetByProducer(producer)
.next()
.put(work.getId(), work);
}
@Override
public void add(final String producer, final List<RenderingBo> work) {
public void add(final Class<? extends AbstractClientModule> producer, final List<RenderingBo> work) {
final var nextMap = this.getWorkingSetByProducer(producer).next();
for (final RenderingBo bo : work) {
nextMap.put(bo.getId(), bo);
@@ -44,17 +45,17 @@ public class RendererWorkingSetImpl implements RendererWorkingSet {
}
@Override
public Map<String, RenderingBo> getUncommittedWork(final String producer) {
public Map<String, RenderingBo> getUncommittedWork(final Class<? extends AbstractClientModule> producer) {
return this.getWorkingSetByProducer(producer).next();
}
@Override
public RenderingBo get(final String producer, final String id) {
public RenderingBo get(final Class<? extends AbstractClientModule> producer, final String id) {
return this.getWorkingSetByProducer(producer).next().get(id);
}
@Override
public Map<String, RenderingBo> commit(final String producer, final boolean clone) {
public Map<String, RenderingBo> commit(final Class<? extends AbstractClientModule> producer, final boolean clone) {
final AtomicReference<Map<String, RenderingBo>> previousWork = new AtomicReference<>();
final RendererWork rendererWork = this.workingSet.compute(producer, (k, v) -> {
if (v == null) {
@@ -93,7 +94,7 @@ public class RendererWorkingSetImpl implements RendererWorkingSet {
this.workingSet.values().forEach(rendererWork -> combinedLiveSet.addAll(rendererWork.live().values()));
}
private RendererWork getWorkingSetByProducer(final String producer) {
private RendererWork getWorkingSetByProducer(final Class<? extends AbstractClientModule> producer) {
return this.workingSet.computeIfAbsent(producer, k -> new RendererWork(this.obtainMapFromPool(), this.obtainMapFromPool()));
}