Move RenderState object into ClientApi

This commit is contained in:
James Seibel
2025-06-26 07:21:33 -05:00
parent af7f90f128
commit 4806cd2445
4 changed files with 48 additions and 126 deletions
@@ -91,44 +91,6 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy
HashSet<Integer> previouslyPressKeyCodes = new HashSet<>();
public static NeoRenderState neoRenderState = new NeoRenderState();
public static class NeoRenderState
{
public Mat4f mcModelViewMatrix = null;
public Mat4f mcProjectionMatrix = null;
public float frameTime = -1;
public void canRenderOrThrow() throws IllegalStateException
{
String errorReasons = "";
if (this.mcModelViewMatrix == null)
{
errorReasons += "no MVM Matrix, ";
}
if (this.mcProjectionMatrix == null)
{
errorReasons += "no Projection Matrix, ";
}
if (this.frameTime == -1)
{
errorReasons += "no Frame Time, ";
}
if (!errorReasons.isEmpty())
{
throw new IllegalStateException(errorReasons);
}
}
}
/**
@@ -115,29 +115,29 @@ public class MixinLevelRenderer
// get the matrices from the OpenGL fixed pipeline
float[] mcProjMatrixRaw = new float[16];
GL32.glGetFloatv(GL32.GL_PROJECTION_MATRIX, mcProjMatrixRaw);
FabricClientProxy.neoRenderState.mcProjectionMatrix = new Mat4f(mcProjMatrixRaw);
FabricClientProxy.neoRenderState.mcProjectionMatrix.transpose();
ClientApi.RENDER_STATE.mcProjectionMatrix = new Mat4f(mcProjMatrixRaw);
ClientApi.RENDER_STATE.mcProjectionMatrix.transpose();
FabricClientProxy.neoRenderState.mcModelViewMatrix = McObjectConverter.Convert(matrixStackIn.last().pose());
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(matrixStackIn.last().pose());
#elif MC_VER <= MC_1_20_4
// get the matrices directly from MC
FabricClientProxy.neoRenderState.mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrixStack.last().pose());
FabricClientProxy.neoRenderState.mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrixStack.last().pose());
ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
#else
// MC combined the model view and projection matricies
FabricClientProxy.neoRenderState.mcModelViewMatrix = McObjectConverter.Convert(projectionMatrix);
FabricClientProxy.neoRenderState.mcProjectionMatrix = new Mat4f();
FabricClientProxy.neoRenderState.mcProjectionMatrix.setIdentity();
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(projectionMatrix);
ClientApi.RENDER_STATE.mcProjectionMatrix = new Mat4f();
ClientApi.RENDER_STATE.mcProjectionMatrix.setIdentity();
#endif
// TODO move this into a common place
#if MC_VER < MC_1_21_1
FabricClientProxy.neoRenderState.frameTime = Minecraft.getInstance().getFrameTime();
ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().getFrameTime();
#elif MC_VER < MC_1_21_3
FabricClientProxy.neoRenderState.frameTime = Minecraft.getInstance().getTimer().getRealtimeDeltaTicks();
ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().getTimer().getRealtimeDeltaTicks();
#else
FabricClientProxy.neoRenderState.frameTime = Minecraft.getInstance().deltaTracker.getRealtimeDeltaTicks();
ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().deltaTracker.getRealtimeDeltaTicks();
#endif
@@ -152,9 +152,9 @@ public class MixinLevelRenderer
if (renderType.equals(RenderType.translucent()))
{
ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper(this.level),
FabricClientProxy.neoRenderState.mcModelViewMatrix,
FabricClientProxy.neoRenderState.mcProjectionMatrix,
FabricClientProxy.neoRenderState.frameTime
ClientApi.RENDER_STATE.mcModelViewMatrix,
ClientApi.RENDER_STATE.mcProjectionMatrix,
ClientApi.RENDER_STATE.frameTime
);
}
#endif
@@ -179,13 +179,13 @@ public class MixinLevelRenderer
// only crash during development
if (ModInfo.IS_DEV_BUILD)
{
FabricClientProxy.neoRenderState.canRenderOrThrow();
ClientApi.RENDER_STATE.canRenderOrThrow();
}
ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper(this.level),
FabricClientProxy.neoRenderState.mcModelViewMatrix,
FabricClientProxy.neoRenderState.mcProjectionMatrix,
FabricClientProxy.neoRenderState.frameTime
ClientApi.RENDER_STATE.mcModelViewMatrix,
ClientApi.RENDER_STATE.mcProjectionMatrix,
ClientApi.RENDER_STATE.frameTime
);
}
#endif
@@ -271,44 +271,4 @@ public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
//================//
// helper classes //
//================//
public static class NeoRenderState
{
public Mat4f mcModelViewMatrix = null;
public Mat4f mcProjectionMatrix = null;
public float frameTime = -1;
public void canRenderOrThrow() throws IllegalStateException
{
String errorReasons = "";
if (this.mcModelViewMatrix == null)
{
errorReasons += "no MVM Matrix, ";
}
if (this.mcProjectionMatrix == null)
{
errorReasons += "no Projection Matrix, ";
}
if (this.frameTime == -1)
{
errorReasons += "no Frame Time, ";
}
if (!errorReasons.isEmpty())
{
throw new IllegalStateException(errorReasons);
}
}
}
}
@@ -99,26 +99,26 @@ public class MixinLevelRenderer
{
#if MC_VER < MC_1_21_6
// MC combined the model view and projection matricies
NeoforgeClientProxy.neoRenderState.mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrix);
NeoforgeClientProxy.neoRenderState.mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrix);
ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
#else
NeoforgeClientProxy.neoRenderState.mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
#endif
//LOGGER.info("\n\n" +
// "Level Mixin\n" +
// "Mc MVM: \n" + NeoforgeClientProxy.neoRenderState.mcModelViewMatrix.toString() + "\n" +
// "Mc Proj: \n" + NeoforgeClientProxy.neoRenderState.mcProjectionMatrix.toString()
// "Mc MVM: \n" + ClientApi.RENDER_STATE.mcModelViewMatrix.toString() + "\n" +
// "Mc Proj: \n" + ClientApi.RENDER_STATE.mcProjectionMatrix.toString()
//);
#if MC_VER < MC_1_21_1
NeoforgeClientProxy.neoRenderState.frameTime = Minecraft.getInstance().getFrameTime();
ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().getFrameTime();
#elif MC_VER < MC_1_21_3
NeoforgeClientProxy.neoRenderState.frameTime = Minecraft.getInstance().getTimer().getRealtimeDeltaTicks();
ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().getTimer().getRealtimeDeltaTicks();
#else
NeoforgeClientProxy.neoRenderState.frameTime = Minecraft.getInstance().deltaTracker.getRealtimeDeltaTicks();
ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().deltaTracker.getRealtimeDeltaTicks();
#endif
@@ -127,23 +127,23 @@ public class MixinLevelRenderer
// only crash during development
if (ModInfo.IS_DEV_BUILD)
{
NeoforgeClientProxy.neoRenderState.canRenderOrThrow();
ClientApi.RENDER_STATE.canRenderOrThrow();
}
// render LODs
if (renderType.equals(RenderType.solid()))
{
ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level),
NeoforgeClientProxy.neoRenderState.mcModelViewMatrix,
NeoforgeClientProxy.neoRenderState.mcProjectionMatrix,
NeoforgeClientProxy.neoRenderState.frameTime);
ClientApi.RENDER_STATE.mcModelViewMatrix,
ClientApi.RENDER_STATE.mcProjectionMatrix,
ClientApi.RENDER_STATE.frameTime);
}
else if (renderType.equals(RenderType.translucent()))
{
ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper(this.level),
NeoforgeClientProxy.neoRenderState.mcModelViewMatrix,
NeoforgeClientProxy.neoRenderState.mcProjectionMatrix,
NeoforgeClientProxy.neoRenderState.frameTime);
ClientApi.RENDER_STATE.mcModelViewMatrix,
ClientApi.RENDER_STATE.mcProjectionMatrix,
ClientApi.RENDER_STATE.frameTime);
}
// render fade
@@ -153,18 +153,18 @@ public class MixinLevelRenderer
if (renderType.equals(RenderType.cutout()))
{
ClientApi.INSTANCE.renderFadeOpaque(
NeoforgeClientProxy.neoRenderState.mcModelViewMatrix,
NeoforgeClientProxy.neoRenderState.mcProjectionMatrix,
NeoforgeClientProxy.neoRenderState.frameTime,
ClientApi.RENDER_STATE.mcModelViewMatrix,
ClientApi.RENDER_STATE.mcProjectionMatrix,
ClientApi.RENDER_STATE.frameTime,
ClientLevelWrapper.getWrapper(this.level)
);
}
else if (renderType.equals(RenderType.tripwire()))
{
ClientApi.INSTANCE.renderFade(
NeoforgeClientProxy.neoRenderState.mcModelViewMatrix,
NeoforgeClientProxy.neoRenderState.mcProjectionMatrix,
NeoforgeClientProxy.neoRenderState.frameTime,
ClientApi.RENDER_STATE.mcModelViewMatrix,
ClientApi.RENDER_STATE.mcProjectionMatrix,
ClientApi.RENDER_STATE.frameTime,
ClientLevelWrapper.getWrapper(this.level)
);
}
@@ -185,18 +185,18 @@ public class MixinLevelRenderer
@Inject(at = @At("HEAD"), method = "prepareChunkRenders", cancellable = true)
private void renderChunkLayer(Matrix4fc modelViewMatrix, double d, double e, double f, CallbackInfoReturnable<ChunkSectionsToRender> callback)
{
NeoforgeClientProxy.neoRenderState.mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrix);
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrix);
// only crash during development
if (ModInfo.IS_DEV_BUILD)
{
NeoforgeClientProxy.neoRenderState.canRenderOrThrow();
ClientApi.RENDER_STATE.canRenderOrThrow();
}
ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level),
NeoforgeClientProxy.neoRenderState.mcModelViewMatrix,
NeoforgeClientProxy.neoRenderState.mcProjectionMatrix,
NeoforgeClientProxy.neoRenderState.frameTime);
ClientApi.RENDER_STATE.mcModelViewMatrix,
ClientApi.RENDER_STATE.mcProjectionMatrix,
ClientApi.RENDER_STATE.frameTime);
}
@@ -206,13 +206,13 @@ public class MixinLevelRenderer
// only crash during development
if (ModInfo.IS_DEV_BUILD)
{
NeoforgeClientProxy.neoRenderState.canRenderOrThrow();
ClientApi.RENDER_STATE.canRenderOrThrow();
}
ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper(this.level),
NeoforgeClientProxy.neoRenderState.mcModelViewMatrix,
NeoforgeClientProxy.neoRenderState.mcProjectionMatrix,
NeoforgeClientProxy.neoRenderState.frameTime
ClientApi.RENDER_STATE.mcModelViewMatrix,
ClientApi.RENDER_STATE.mcProjectionMatrix,
ClientApi.RENDER_STATE.frameTime
);
}