From ec3ff260fe4eb117ec5a44a41f717fcac20ab048 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 30 May 2026 09:17:46 -0500 Subject: [PATCH] Reduce render event GC pressure --- .../blaze/BlazeDebugWireframeRenderer.java | 9 +++-- .../blaze/BlazeDhGenericObjectRenderer.java | 10 ++++-- .../render/blaze/BlazeDhTerrainRenderer.java | 12 +++++-- .../BlazeDhFarFadeRenderer.java | 11 +----- .../uniform/BlazeUniformBufferWrapper.java | 5 +-- .../generic/GlGenericObjectRenderer.java | 8 +++-- .../glObject/shader/GlShaderProgram.java | 35 ++++++++++++++++--- .../fade/GlDhFarFadeRenderer.java | 2 +- .../fade/GlDhFarFadeShader.java | 12 ++----- .../fade/GlDhVanillaFadeShader.java | 21 +++-------- .../fade/GlVanillaFadeRenderer.java | 2 +- .../terrain/GlDhTerrainShaderProgram.java | 14 +++++--- coreSubProjects | 2 +- 13 files changed, 81 insertions(+), 62 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDebugWireframeRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDebugWireframeRenderer.java index ca8f4472d..7bd2d8555 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDebugWireframeRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDebugWireframeRenderer.java @@ -64,8 +64,6 @@ public class BlazeDebugWireframeRenderer extends AbstractDebugWireframeRenderer public static BlazeDebugWireframeRenderer INSTANCE = new BlazeDebugWireframeRenderer(); - - /** A box from 0,0,0 to 1,1,1 */ private static final float[] BOX_VERTICES = { //region @@ -100,6 +98,7 @@ public class BlazeDebugWireframeRenderer extends AbstractDebugWireframeRenderer //endregion }; + private static final Mat4f TRANSFORM_MATRIX = new Mat4f(); @@ -268,13 +267,13 @@ public class BlazeDebugWireframeRenderer extends AbstractDebugWireframeRenderer box.maxPos.y - box.minPos.y, box.maxPos.z - box.minPos.z)); - Mat4f transformMatrix = this.dhMvmProjMatrixThisFrame.copy(); - transformMatrix.multiply(boxTransform); + TRANSFORM_MATRIX.set(this.dhMvmProjMatrixThisFrame); + TRANSFORM_MATRIX.multiply(boxTransform); // upload data // this.uniformBufferWrapper - .putMat4f(transformMatrix) // uTransform + .putMat4f(TRANSFORM_MATRIX) // uTransform .putVec4f( box.color.getRed() / 255.0f, box.color.getGreen() / 255.0f, diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhGenericObjectRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhGenericObjectRenderer.java index 20b5e3b46..1f2a363d9 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhGenericObjectRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhGenericObjectRenderer.java @@ -36,6 +36,7 @@ import com.seibel.distanthorizons.api.interfaces.render.IDhApiRenderableBoxGroup import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeGenericObjectRenderEvent; import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeGenericRenderCleanupEvent; import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeGenericRenderSetupEvent; +import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiRenderParam; import com.seibel.distanthorizons.api.objects.math.DhApiVec3d; import com.seibel.distanthorizons.api.objects.render.DhApiRenderableBox; import com.seibel.distanthorizons.api.objects.render.DhApiRenderableBoxGroupShading; @@ -96,6 +97,10 @@ public class BlazeDhGenericObjectRenderer implements IDhGenericRenderer */ public static final boolean RENDER_DEBUG_OBJECTS = false; + private static final DhApiBeforeGenericObjectRenderEvent.EventParam EVENT_PARAM = new DhApiBeforeGenericObjectRenderEvent.EventParam(); + + + private final ConcurrentHashMap boxGroupById = new ConcurrentHashMap<>(); @@ -343,7 +348,7 @@ public class BlazeDhGenericObjectRenderer implements IDhGenericRenderer this.init(); - ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeGenericRenderSetupEvent.class, renderEventParam); + ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeGenericRenderSetupEvent.class, renderEventParam.apiCopy); Vec3d camPos = MC_RENDER.getCameraExactPosition(); @@ -389,7 +394,8 @@ public class BlazeDhGenericObjectRenderer implements IDhGenericRenderer } // allow API users to cancel this object's rendering - boolean cancelRendering = ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeGenericObjectRenderEvent.class, new DhApiBeforeGenericObjectRenderEvent.EventParam(renderEventParam, boxGroup)); + EVENT_PARAM.update(renderEventParam, boxGroup); + boolean cancelRendering = ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeGenericObjectRenderEvent.class, EVENT_PARAM); if (cancelRendering) { continue; diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhTerrainRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhTerrainRenderer.java index 3e5ee9757..686b4b880 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhTerrainRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhTerrainRenderer.java @@ -13,6 +13,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.VertexFormat; import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeBufferRenderEvent; import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeRenderPassEvent; +import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiRenderParam; import com.seibel.distanthorizons.common.render.blaze.util.BlazeDhVertexFormatUtil; import com.seibel.distanthorizons.common.render.blaze.wrappers.BlazeVertexFormatBuilder; import com.seibel.distanthorizons.common.render.blaze.wrappers.RenderPassWrapper; @@ -53,6 +54,10 @@ public class BlazeDhTerrainRenderer implements IDhTerrainRenderer public static final BlazeDhTerrainRenderer INSTANCE = new BlazeDhTerrainRenderer(); + private static final Vec3f MODEL_POS = new Vec3f(); + /** single event object used to reduce GC pressure */ + private static final DhApiBeforeBufferRenderEvent.EventParam BEFORE_BUFFER_RENDER_EVENT_PARAM = new DhApiBeforeBufferRenderEvent.EventParam(); + private RenderPipeline opaquePipeline; private RenderPipeline transparentPipeline; @@ -240,7 +245,7 @@ public class BlazeDhTerrainRenderer implements IDhTerrainRenderer { profiler.popPush("rendering"); - ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeRenderPassEvent.class, renderEventParam); + ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeRenderPassEvent.class, renderEventParam.apiCopy); // create a render pass try (RenderPassWrapper renderPassWrapper = new RenderPassWrapper( @@ -300,11 +305,12 @@ public class BlazeDhTerrainRenderer implements IDhTerrainRenderer // fire render event { Vec3d camPos = renderEventParam.exactCameraPosition; - Vec3f modelPos = new Vec3f( + MODEL_POS.set( (float) (bufferContainer.minCornerBlockPos.getX() - camPos.x), (float) (bufferContainer.minCornerBlockPos.getY() - camPos.y), (float) (bufferContainer.minCornerBlockPos.getZ() - camPos.z)); - ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeBufferRenderEvent.class, new DhApiBeforeBufferRenderEvent.EventParam(renderEventParam, modelPos)); + BEFORE_BUFFER_RENDER_EVENT_PARAM.update(renderEventParam, MODEL_POS); + ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeBufferRenderEvent.class, BEFORE_BUFFER_RENDER_EVENT_PARAM); } renderPassWrapper.setIndexBuffer(bufferWrapper.getIndexGpuBuffer()); diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/postProcessing/BlazeDhFarFadeRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/postProcessing/BlazeDhFarFadeRenderer.java index c008b59a3..e0ca4c70a 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/postProcessing/BlazeDhFarFadeRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/postProcessing/BlazeDhFarFadeRenderer.java @@ -159,20 +159,11 @@ public class BlazeDhFarFadeRenderer implements IDhFarFadeRenderer float fadeEndDistance = dhFarClipDistance * 0.9f; - Mat4f dhProjectionMatrix = RenderUtil.createLodProjectionMatrix(renderParams.mcProjectionMatrix); - Mat4f dhModelViewMatrix = RenderUtil.createLodModelViewMatrix(renderParams.mcModelViewMatrix); - - Mat4f inverseDhMvmProjMatrix = new Mat4f(dhProjectionMatrix); - inverseDhMvmProjMatrix.multiply(dhModelViewMatrix); - inverseDhMvmProjMatrix.invert(); - - - // upload data // fragUniformBufferWrapper .putFloat(fadeStartDistance) // uStartFadeBlockDistance .putFloat(fadeEndDistance) // uEndFadeBlockDistance - .putMat4f(inverseDhMvmProjMatrix) // uDhInvMvmProj + .putMat4f(renderParams.dhInverseMvmProjectionMatrix) // uDhInvMvmProj .putInt((RENDER_API_DEF.getRenderDepth() == EDhRenderDepth.REVERSE_Z) ? 1 : 0) // uIsReverseZDepth .finishAndUpload() ; diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/wrappers/uniform/BlazeUniformBufferWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/wrappers/uniform/BlazeUniformBufferWrapper.java index 094bc7329..77c83e0fa 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/wrappers/uniform/BlazeUniformBufferWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/wrappers/uniform/BlazeUniformBufferWrapper.java @@ -12,6 +12,7 @@ import com.mojang.blaze3d.buffers.Std140SizeCalculator; import com.mojang.blaze3d.systems.CommandEncoder; import com.mojang.blaze3d.systems.GpuDevice; import com.mojang.blaze3d.systems.RenderSystem; +import com.seibel.distanthorizons.api.objects.math.DhApiMat4f; import com.seibel.distanthorizons.common.render.blaze.util.BlazeUniformUtil; import com.seibel.distanthorizons.core.logging.DhLogger; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; @@ -91,10 +92,10 @@ public class BlazeUniformBufferWrapper implements AutoCloseable this.uniformBufferBuilder.putVec4(x,y,z,w); return this; } - public BlazeUniformBufferWrapper putMat4f(Mat4f matrix) + public BlazeUniformBufferWrapper putMat4f(DhApiMat4f matrix) { this.putElement(EUniformElement.MAT4f); - this.uniformBufferBuilder.putMat4f(matrix.createJomlMatrix()); + this.uniformBufferBuilder.putMat4f(Mat4f.createJomlMatrix(matrix)); return this; } public BlazeUniformBufferWrapper putFloat(float f) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/generic/GlGenericObjectRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/generic/GlGenericObjectRenderer.java index 5670cf08e..d14249e39 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/generic/GlGenericObjectRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/generic/GlGenericObjectRenderer.java @@ -75,6 +75,7 @@ public class GlGenericObjectRenderer implements IDhGenericRenderer private static final DhApiRenderableBoxGroupShading DEFAULT_SHADING = DhApiRenderableBoxGroupShading.getUnshaded(); + private static final DhApiBeforeGenericObjectRenderEvent.EventParam EVENT_PARAM = new DhApiBeforeGenericObjectRenderEvent.EventParam(); /** * Can be used to troubleshoot the renderer. @@ -418,7 +419,7 @@ public class GlGenericObjectRenderer implements IDhGenericRenderer this.init(); - ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeGenericRenderSetupEvent.class, renderEventParam); + ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeGenericRenderSetupEvent.class, renderEventParam.apiCopy); boolean renderWireframe = Config.Client.Advanced.Debugging.renderWireframe.get(); @@ -482,7 +483,8 @@ public class GlGenericObjectRenderer implements IDhGenericRenderer } // allow API users to cancel this object's rendering - boolean cancelRendering = ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeGenericObjectRenderEvent.class, new DhApiBeforeGenericObjectRenderEvent.EventParam(renderEventParam, boxGroup)); + EVENT_PARAM.update(renderEventParam, boxGroup); + boolean cancelRendering = ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeGenericObjectRenderEvent.class, EVENT_PARAM); if (cancelRendering) { continue; @@ -529,7 +531,7 @@ public class GlGenericObjectRenderer implements IDhGenericRenderer profiler.popPush("cleanup"); - ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeGenericRenderCleanupEvent.class, renderEventParam); + ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeGenericRenderCleanupEvent.class, renderEventParam.apiCopy); if (renderWireframe) { diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/shader/GlShaderProgram.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/shader/GlShaderProgram.java index 011de6d41..33a59775b 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/shader/GlShaderProgram.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/shader/GlShaderProgram.java @@ -22,6 +22,7 @@ package com.seibel.distanthorizons.common.render.openGl.glObject.shader; import java.awt.Color; import java.nio.FloatBuffer; +import com.seibel.distanthorizons.api.objects.math.DhApiMat4f; import com.seibel.distanthorizons.api.objects.math.DhApiVec3i; import org.lwjgl.opengl.GL32; import org.lwjgl.system.MemoryStack; @@ -187,20 +188,44 @@ public class GlShaderProgram /** Requires a bound ShaderProgram. */ public void setUniform(int location, DhApiVec3i value) { GL32.glUniform3i(location, value.x, value.y, value.z); } - /** @see GlShaderProgram#setUniform(int, Mat4f) */ + /** @see GlShaderProgram#setUniform(int, DhApiMat4f) */ public void trySetUniform(int location, DhApiVec3i value) { if (location != -1) { this.setUniform(location, value); } } /** Requires a bound ShaderProgram. */ - public void setUniform(int location, Mat4f value) + public void setUniform(int location, DhApiMat4f value) { try (MemoryStack stack = MemoryStack.stackPush()) { - FloatBuffer buffer = stack.mallocFloat(4 * 4); - value.store(buffer); + FloatBuffer buffer = stack.mallocFloat(16); + storeMatrixInBuffer(value, buffer); GL32.glUniformMatrix4fv(location, false, buffer); } } - /** @see GlShaderProgram#setUniform(int, Mat4f) */ + private static void storeMatrixInBuffer(DhApiMat4f matrix, FloatBuffer floatBuffer) + { + floatBuffer.put(bufferIndex(0, 0), matrix.m00); + floatBuffer.put(bufferIndex(0, 1), matrix.m01); + floatBuffer.put(bufferIndex(0, 2), matrix.m02); + floatBuffer.put(bufferIndex(0, 3), matrix.m03); + + floatBuffer.put(bufferIndex(1, 0), matrix.m10); + floatBuffer.put(bufferIndex(1, 1), matrix.m11); + floatBuffer.put(bufferIndex(1, 2), matrix.m12); + floatBuffer.put(bufferIndex(1, 3), matrix.m13); + + floatBuffer.put(bufferIndex(2, 0), matrix.m20); + floatBuffer.put(bufferIndex(2, 1), matrix.m21); + floatBuffer.put(bufferIndex(2, 2), matrix.m22); + floatBuffer.put(bufferIndex(2, 3), matrix.m23); + + floatBuffer.put(bufferIndex(3, 0), matrix.m30); + floatBuffer.put(bufferIndex(3, 1), matrix.m31); + floatBuffer.put(bufferIndex(3, 2), matrix.m32); + floatBuffer.put(bufferIndex(3, 3), matrix.m33); + } + private static int bufferIndex(int xIndex, int zIndex) { return (zIndex * 4) + xIndex; } + + /** @see GlShaderProgram#setUniform(int, DhApiMat4f) */ public void trySetUniform(int location, Mat4f value) { if (location != -1) { this.setUniform(location, value); } } /** diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlDhFarFadeRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlDhFarFadeRenderer.java index 5fbd50b32..efa4a5ac1 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlDhFarFadeRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlDhFarFadeRenderer.java @@ -136,7 +136,7 @@ public class GlDhFarFadeRenderer implements IDhFarFadeRenderer GlDhFarFadeShader.INSTANCE.frameBuffer = this.fadeFramebuffer; - GlDhFarFadeShader.INSTANCE.setProjectionMatrix(renderParams.mcModelViewMatrix, renderParams.mcProjectionMatrix); + GlDhFarFadeShader.INSTANCE.setProjectionMatrix(renderParams); GlDhFarFadeShader.INSTANCE.render(renderParams); GlDhFarFadeApplyShader.INSTANCE.fadeTexture = this.fadeTexture; diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlDhFarFadeShader.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlDhFarFadeShader.java index e8e33f30b..0d11c1d9b 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlDhFarFadeShader.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlDhFarFadeShader.java @@ -42,7 +42,7 @@ public class GlDhFarFadeShader extends GlAbstractShaderRenderer public int frameBuffer = -1; - private Mat4f inverseDhMvmProjMatrix; + private DhApiMat4f inverseDhMvmProjMatrix; // Uniforms @@ -110,15 +110,9 @@ public class GlDhFarFadeShader extends GlAbstractShaderRenderer } - public void setProjectionMatrix(DhApiMat4f mcModelViewMatrix, DhApiMat4f mcProjectionMatrix) + public void setProjectionMatrix(RenderParams renderParams) { - Mat4f dhProjectionMatrix = RenderUtil.createLodProjectionMatrix(mcProjectionMatrix); - Mat4f dhModelViewMatrix = RenderUtil.createLodModelViewMatrix(mcModelViewMatrix); - - Mat4f inverseDhModelViewProjectionMatrix = new Mat4f(dhProjectionMatrix); - inverseDhModelViewProjectionMatrix.multiply(dhModelViewMatrix); - inverseDhModelViewProjectionMatrix.invert(); - this.inverseDhMvmProjMatrix = inverseDhModelViewProjectionMatrix; + this.inverseDhMvmProjMatrix = renderParams.dhInverseMvmProjectionMatrix; } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlDhVanillaFadeShader.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlDhVanillaFadeShader.java index ac921503d..76fa92162 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlDhVanillaFadeShader.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlDhVanillaFadeShader.java @@ -43,8 +43,8 @@ public class GlDhVanillaFadeShader extends GlAbstractShaderRenderer public int frameBuffer = -1; - private Mat4f inverseMcMvmProjMatrix; - private Mat4f inverseDhMvmProjMatrix; + private DhApiMat4f inverseMcMvmProjMatrix; + private DhApiMat4f inverseDhMvmProjMatrix; private float levelMaxHeight; @@ -136,21 +136,10 @@ public class GlDhVanillaFadeShader extends GlAbstractShaderRenderer this.shader.setUniform(this.uOnlyRenderLods, Config.Client.Advanced.Debugging.lodOnlyMode.get()); } - public void setProjectionMatrix(DhApiMat4f mcModelViewMatrix, DhApiMat4f mcProjectionMatrix) + public void setProjectionMatrix(RenderParams renderParams) { - Mat4f inverseMcModelViewProjectionMatrix = new Mat4f(mcProjectionMatrix); - inverseMcModelViewProjectionMatrix.multiply(mcModelViewMatrix); - inverseMcModelViewProjectionMatrix.invert(); - this.inverseMcMvmProjMatrix = inverseMcModelViewProjectionMatrix; - - - Mat4f dhProjectionMatrix = RenderUtil.createLodProjectionMatrix(mcProjectionMatrix); - Mat4f dhModelViewMatrix = RenderUtil.createLodModelViewMatrix(mcModelViewMatrix); - - Mat4f inverseDhModelViewProjectionMatrix = new Mat4f(dhProjectionMatrix); - inverseDhModelViewProjectionMatrix.multiply(dhModelViewMatrix); - inverseDhModelViewProjectionMatrix.invert(); - this.inverseDhMvmProjMatrix = inverseDhModelViewProjectionMatrix; + this.inverseMcMvmProjMatrix = renderParams.mcInverseMvmProjectionMatrix; + this.inverseDhMvmProjMatrix = renderParams.dhInverseMvmProjectionMatrix; } public void setLevelMaxHeight(int levelMaxHeight) { this.levelMaxHeight = levelMaxHeight; } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlVanillaFadeRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlVanillaFadeRenderer.java index 950fc0a4d..394ad54b3 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlVanillaFadeRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlVanillaFadeRenderer.java @@ -152,7 +152,7 @@ public class GlVanillaFadeRenderer implements IDhVanillaFadeRenderer GlDhVanillaFadeShader.INSTANCE.frameBuffer = this.fadeFramebuffer; - GlDhVanillaFadeShader.INSTANCE.setProjectionMatrix(renderParams.mcModelViewMatrix, renderParams.mcProjectionMatrix); + GlDhVanillaFadeShader.INSTANCE.setProjectionMatrix(renderParams); GlDhVanillaFadeShader.INSTANCE.setLevelMaxHeight(renderParams.clientLevelWrapper.getMaxHeight()); GlDhVanillaFadeShader.INSTANCE.render(renderParams); diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/terrain/GlDhTerrainShaderProgram.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/terrain/GlDhTerrainShaderProgram.java index 2b156b11d..9d15cf060 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/terrain/GlDhTerrainShaderProgram.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/terrain/GlDhTerrainShaderProgram.java @@ -46,6 +46,11 @@ public class GlDhTerrainShaderProgram extends GlShaderProgram implements IDhApiS private static final MinecraftGLWrapper GLMC = MinecraftGLWrapper.INSTANCE; private static final IIrisAccessor IRIS_ACCESSOR = ModAccessorInjector.INSTANCE.get(IIrisAccessor.class); + private static final Vec3f MODEL_POS = new Vec3f(); + /** single event object used to reduce GC pressure */ + private static final DhApiBeforeBufferRenderEvent.EventParam BEFORE_BUFFER_RENDER_EVENT_PARAM = new DhApiBeforeBufferRenderEvent.EventParam(); + + private boolean init = false; @@ -291,7 +296,7 @@ public class GlDhTerrainShaderProgram extends GlShaderProgram implements IDhApiS // needs to be triggered after DH attempts to set the GL state so that Iris // can override it as needed - ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeRenderPassEvent.class, renderEventParam); + ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeRenderPassEvent.class, renderEventParam.apiCopy); @@ -324,15 +329,16 @@ public class GlDhTerrainShaderProgram extends GlShaderProgram implements IDhApiS // set uniforms and fire events { Vec3d camPos = renderEventParam.exactCameraPosition; - Vec3f modelPos = new Vec3f( + MODEL_POS.set( (float) (bufferContainer.minCornerBlockPos.getX() - camPos.x), (float) (bufferContainer.minCornerBlockPos.getY() - camPos.y), (float) (bufferContainer.minCornerBlockPos.getZ() - camPos.z)); + BEFORE_BUFFER_RENDER_EVENT_PARAM.update(renderEventParam, MODEL_POS); GlDhMetaRenderer.INSTANCE.shaderProgramForThisFrame.bind(); - GlDhMetaRenderer.INSTANCE.shaderProgramForThisFrame.setModelOffsetPos(modelPos); + GlDhMetaRenderer.INSTANCE.shaderProgramForThisFrame.setModelOffsetPos(MODEL_POS); - ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeBufferRenderEvent.class, new DhApiBeforeBufferRenderEvent.EventParam(renderEventParam, modelPos)); + ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeBufferRenderEvent.class, BEFORE_BUFFER_RENDER_EVENT_PARAM); } IVertexBufferWrapper[] vertexBuffers = (opaquePass ? bufferContainer.vboOpaqueWrappers : bufferContainer.vboTransparentWrappers); diff --git a/coreSubProjects b/coreSubProjects index 8cd926f4a..95e4db299 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 8cd926f4ac78225465505afdec8d3ba8f4dddf16 +Subproject commit 95e4db29985ac8fae029b1ce88cc280857422fd0