diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/ClientLevelModule.java b/core/src/main/java/com/seibel/distanthorizons/core/level/ClientLevelModule.java index 97bc4d87a..7e2d13cc7 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/ClientLevelModule.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/ClientLevelModule.java @@ -278,6 +278,7 @@ public class ClientLevelModule implements Closeable, AbstractDataSourceHandler.I public final IClientLevelWrapper clientLevelWrapper; public final LodQuadTree quadtree; + public final RenderBufferHandler renderBufferHandler; public final LodRenderer lodRenderer; public final GenericObjectRenderer genericRenderer; @@ -296,9 +297,9 @@ public class ClientLevelModule implements Closeable, AbstractDataSourceHandler.I 0, 0, fullDataSourceProvider); - RenderBufferHandler renderBufferHandler = new RenderBufferHandler(this.quadtree); this.genericRenderer = new GenericObjectRenderer(); - this.lodRenderer = new LodRenderer(renderBufferHandler, this.genericRenderer); + this.renderBufferHandler = new RenderBufferHandler(this.quadtree); + this.lodRenderer = new LodRenderer(this.renderBufferHandler, this.genericRenderer); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java index e8823d0b1..166b0a1df 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java @@ -26,6 +26,7 @@ import com.seibel.distanthorizons.core.file.fullDatafile.RemoteFullDataSourcePro import com.seibel.distanthorizons.core.file.structure.AbstractSaveStructure; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.pos.DhBlockPos; +import com.seibel.distanthorizons.core.render.RenderBufferHandler; import com.seibel.distanthorizons.core.render.renderer.GenericObjectRenderer; import com.seibel.distanthorizons.core.wrapperInterfaces.block.IBlockStateWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IProfilerWrapper; @@ -177,5 +178,11 @@ public class DhClientLevel extends AbstractDhLevel implements IDhClientLevel ClientLevelModule.ClientRenderState renderState = this.clientside.ClientRenderStateRef.get(); return (renderState != null) ? renderState.genericRenderer : null; } + @Override + public RenderBufferHandler getRenderBufferHandler() + { + ClientLevelModule.ClientRenderState renderState = this.clientside.ClientRenderStateRef.get(); + return (renderState != null) ? renderState.renderBufferHandler : null; + } } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientServerLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientServerLevel.java index a63fd71eb..5d6f6ca79 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientServerLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientServerLevel.java @@ -24,6 +24,7 @@ import com.seibel.distanthorizons.core.dataObjects.fullData.sources.FullDataSour import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.file.fullDatafile.FullDataSourceProviderV2; import com.seibel.distanthorizons.core.logging.f3.F3Screen; +import com.seibel.distanthorizons.core.render.RenderBufferHandler; import com.seibel.distanthorizons.core.render.renderer.DebugRenderer; import com.seibel.distanthorizons.core.file.structure.AbstractSaveStructure; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; @@ -231,6 +232,12 @@ public class DhClientServerLevel extends AbstractDhLevel implements IDhClientLev ClientLevelModule.ClientRenderState renderState = this.clientside.ClientRenderStateRef.get(); return (renderState != null) ? renderState.genericRenderer : null; } + @Override + public RenderBufferHandler getRenderBufferHandler() + { + ClientLevelModule.ClientRenderState renderState = this.clientside.ClientRenderStateRef.get(); + return (renderState != null) ? renderState.renderBufferHandler : null; + } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java index 63ed6266e..0b950ed39 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java @@ -24,6 +24,7 @@ import com.seibel.distanthorizons.core.file.fullDatafile.FullDataSourceProviderV import com.seibel.distanthorizons.core.file.structure.AbstractSaveStructure; import com.seibel.distanthorizons.core.pos.DhBlockPos2D; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; +import com.seibel.distanthorizons.core.render.RenderBufferHandler; import com.seibel.distanthorizons.core.render.renderer.GenericObjectRenderer; import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.world.IServerLevelWrapper; @@ -123,7 +124,12 @@ public class DhServerLevel extends AbstractDhLevel implements IDhServerLevel // server-only levels don't support rendering return null; } - + @Override + public RenderBufferHandler getRenderBufferHandler() + { + // server-only levels don't support rendering + return null; + } //===========// diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/IDhLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/IDhLevel.java index 5cfb22dc5..575ade4a6 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/IDhLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/IDhLevel.java @@ -24,6 +24,7 @@ import com.seibel.distanthorizons.core.dataObjects.fullData.sources.FullDataSour import com.seibel.distanthorizons.core.file.fullDatafile.FullDataSourceProviderV2; import com.seibel.distanthorizons.core.file.structure.AbstractSaveStructure; import com.seibel.distanthorizons.core.pos.DhChunkPos; +import com.seibel.distanthorizons.core.render.RenderBufferHandler; import com.seibel.distanthorizons.core.render.renderer.GenericObjectRenderer; import com.seibel.distanthorizons.core.sql.dto.BeaconBeamDTO; import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.IChunkWrapper; @@ -75,5 +76,11 @@ public interface IDhLevel extends AutoCloseable */ @Nullable GenericObjectRenderer getGenericRenderer(); + /** + * Will return null if the renderer isn't set up yet.
+ * Not supported on the server-side. + */ + @Nullable + RenderBufferHandler getRenderBufferHandler(); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/logging/f3/F3Screen.java b/core/src/main/java/com/seibel/distanthorizons/core/logging/f3/F3Screen.java index a3d4666be..6719ada25 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/logging/f3/F3Screen.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/logging/f3/F3Screen.java @@ -22,6 +22,7 @@ package com.seibel.distanthorizons.core.logging.f3; import com.seibel.distanthorizons.core.api.internal.SharedApi; import com.seibel.distanthorizons.core.level.IDhLevel; import com.seibel.distanthorizons.core.render.RenderBufferHandler; +import com.seibel.distanthorizons.core.render.renderer.GenericObjectRenderer; import com.seibel.distanthorizons.core.util.threading.ThreadPoolUtil; import com.seibel.distanthorizons.core.world.AbstractDhWorld; import com.seibel.distanthorizons.coreapi.ModInfo; @@ -42,23 +43,6 @@ public class F3Screen - //============// - // properties // - //============// - - private static WeakReference renderBufferHandlerRef = new WeakReference<>(null); - public static void setRenderBufferHandler(@Nullable RenderBufferHandler renderBufferHandler) - { - if (renderBufferHandler != null && renderBufferHandlerRef.get() != null) - { - LOGGER.warn("multiple RenderBufferHandlers are active at once, the F3 menu may not be accurate."); - } - - renderBufferHandlerRef = new WeakReference<>(renderBufferHandler); - } - - - //=================// // injection point // //=================// @@ -106,23 +90,28 @@ public class F3Screen // chunk updates messageList.add(SharedApi.INSTANCE.getDebugMenuString()); messageList.add(""); - // rendering - RenderBufferHandler renderBufferHandler = renderBufferHandlerRef.get(); - if (renderBufferHandler != null) - { - messageList.add(renderBufferHandler.getVboRenderDebugMenuString()); - String showPassString = renderBufferHandler.getShadowPassRenderDebugMenuString(); - if (showPassString != null) - { - messageList.add(showPassString); - } - messageList.add(""); - } // world / levels messageList.add(world.GetDebugMenuString()); for (IDhLevel level : levelIterator) { level.addDebugMenuStringsToList(messageList); + // LOD rendering + RenderBufferHandler renderBufferHandler = level.getRenderBufferHandler(); + if (renderBufferHandler != null) + { + messageList.add(renderBufferHandler.getVboRenderDebugMenuString()); + String showPassString = renderBufferHandler.getShadowPassRenderDebugMenuString(); + if (showPassString != null) + { + messageList.add(showPassString); + } + } + // Generic rendering + GenericObjectRenderer genericRenderer = level.getGenericRenderer(); + if (genericRenderer != null) + { + messageList.add(genericRenderer.getVboRenderDebugMenuString()); + } } } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/RenderBufferHandler.java b/core/src/main/java/com/seibel/distanthorizons/core/render/RenderBufferHandler.java index 39e7a26e5..8a952bb93 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/RenderBufferHandler.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/RenderBufferHandler.java @@ -100,9 +100,6 @@ public class RenderBufferHandler implements AutoCloseable { DhApi.overrides.bind(IDhApiShadowCullingFrustum.class, new NeverCullFrustum()); } - - - F3Screen.setRenderBufferHandler(this); } @@ -417,8 +414,6 @@ public class RenderBufferHandler implements AutoCloseable renderSection.close(); } } - - F3Screen.setRenderBufferHandler(null); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/GenericObjectRenderer.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/GenericObjectRenderer.java index 208b39b9e..ea73498bd 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/GenericObjectRenderer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/GenericObjectRenderer.java @@ -27,9 +27,11 @@ import com.seibel.distanthorizons.api.interfaces.render.IDhApiCustomRenderRegist import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiRenderParam; import com.seibel.distanthorizons.api.objects.math.DhApiVec3f; import com.seibel.distanthorizons.api.objects.render.DhApiRenderableBox; +import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.logging.ConfigBasedSpamLogger; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; +import com.seibel.distanthorizons.core.logging.f3.F3Screen; import com.seibel.distanthorizons.core.pos.DhBlockPos; import com.seibel.distanthorizons.core.render.glObject.GLProxy; import com.seibel.distanthorizons.core.render.glObject.GLState; @@ -613,6 +615,33 @@ public class GenericObjectRenderer implements IDhApiCustomRenderRegister + + //=========// + // F3 menu // + //=========// + + public String getVboRenderDebugMenuString() + { + // get counts + int totalCount = this.boxGroupById.size(); + int activeCount = 0; + for (long key : this.boxGroupById.keySet()) + { + RenderableBoxGroup renderGroup = this.boxGroupById.get(key); + if (renderGroup.active) + { + activeCount++; + } + } + + + String totalCountText = F3Screen.NUMBER_FORMAT.format(totalCount); + String activeCountText = F3Screen.NUMBER_FORMAT.format(activeCount); + return LodUtil.formatLog("Generic Obj Count: " + activeCountText + "/" + totalCountText); + } + + + //================// // helper classes // //================//