Add generic rendering to the F3 menu

This commit is contained in:
James Seibel
2024-07-03 20:46:11 -05:00
parent ae72e627c5
commit 81bfa9a02b
8 changed files with 78 additions and 37 deletions
@@ -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);
}
@@ -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;
}
}
@@ -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;
}
@@ -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;
}
//===========//
@@ -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. <br>
* Not supported on the server-side.
*/
@Nullable
RenderBufferHandler getRenderBufferHandler();
}
@@ -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<RenderBufferHandler> 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());
}
}
}
@@ -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);
}
@@ -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 //
//================//