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 //
//================//