diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnRenderBuffer.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnRenderBuffer.java index 27542c57a..7c531c7f5 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnRenderBuffer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnRenderBuffer.java @@ -59,8 +59,8 @@ public class ColumnRenderBuffer implements AutoCloseable public boolean buffersUploaded = false; - private SharedVbo.BufferSlice[] opaqueBufferSlices; - private SharedVbo.BufferSlice[] transparentBufferSlices; + public SharedVbo.BufferSlice[] opaqueBufferSlices; + public SharedVbo.BufferSlice[] transparentBufferSlices; @@ -236,17 +236,17 @@ public class ColumnRenderBuffer implements AutoCloseable // render // //========// - public void renderOpaque(LodRenderer renderContext, DhApiRenderParam renderEventParam) - { - renderContext.setModelViewMatrixOffset(this.pos, renderEventParam); - renderContext.drawSharedVbo(SharedVbo.OPAQUE, this.opaqueBufferSlices); - } - - public void renderTransparent(LodRenderer renderContext, DhApiRenderParam renderEventParam) - { - renderContext.setModelViewMatrixOffset(this.pos, renderEventParam); - renderContext.drawSharedVbo(SharedVbo.TRANSPARENT, this.transparentBufferSlices); - } + //public void renderOpaque(LodRenderer renderContext, DhApiRenderParam renderEventParam) + //{ + // renderContext.setModelViewMatrixOffset(this.pos, renderEventParam); + // renderContext.drawSharedVbo(SharedVbo.OPAQUE, this.opaqueBufferSlices); + //} + // + //public void renderTransparent(LodRenderer renderContext, DhApiRenderParam renderEventParam) + //{ + // renderContext.setModelViewMatrixOffset(this.pos, renderEventParam); + // renderContext.drawSharedVbo(SharedVbo.TRANSPARENT, this.transparentBufferSlices); + //} diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/SharedVbo.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/SharedVbo.java index 9b655d8ab..cb8f88d29 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/SharedVbo.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/SharedVbo.java @@ -19,8 +19,8 @@ public class SharedVbo { private static final Logger LOGGER = DhLoggerBuilder.getLogger(); - public static final SharedVbo OPAQUE = new SharedVbo(1_000_000_000/*1GB*/, 1024 * 1024/*1MB*/); - public static final SharedVbo TRANSPARENT = new SharedVbo(1_000_000_000/*1GB*/, 1024 * 1024/*1MB*/); + public static final SharedVbo OPAQUE = new SharedVbo(2_000_000_000L/*1GB*/, 1024 * 1024/*1MB*/); + public static final SharedVbo TRANSPARENT = new SharedVbo(2_000_000_000L/*1GB*/, 1024 * 1024/*1MB*/); public final int vboId; 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 d02a238fb..3a2e9d069 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 @@ -25,11 +25,13 @@ import com.seibel.distanthorizons.api.interfaces.override.rendering.IDhApiShadow import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiRenderParam; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.dataObjects.render.bufferBuilding.ColumnRenderBuffer; +import com.seibel.distanthorizons.core.dataObjects.render.bufferBuilding.SharedVbo; import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.enums.EDhDirection; 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.pos.DhLodPos; import com.seibel.distanthorizons.core.pos.DhSectionPos; import com.seibel.distanthorizons.core.pos.Pos2D; @@ -48,9 +50,7 @@ import org.apache.logging.log4j.Logger; import org.joml.Matrix4f; import org.joml.Matrix4fc; -import java.util.Comparator; -import java.util.Iterator; -import java.util.ListIterator; +import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; /** @@ -348,7 +348,11 @@ public class RenderBufferHandler implements AutoCloseable // TODO why can these sometimes be null when teleporting between multiverses if (this.loadedNearToFarBuffers != null) { - this.loadedNearToFarBuffers.forEach(loadedBuffer -> loadedBuffer.buffer.renderOpaque(renderContext, renderEventParam)); + renderContext.setModelViewMatrixOffset(DhBlockPos.ZERO, renderEventParam); + + ArrayList sliceList = new ArrayList<>(); + this.loadedNearToFarBuffers.forEach(loadedBuffer -> sliceList.addAll(Arrays.asList(loadedBuffer.buffer.opaqueBufferSlices))); + renderContext.drawSharedVbo(SharedVbo.OPAQUE, sliceList.toArray(new SharedVbo.BufferSlice[0])); } } public void renderTransparent(LodRenderer renderContext, DhApiRenderParam renderEventParam) @@ -356,12 +360,11 @@ public class RenderBufferHandler implements AutoCloseable // TODO why can these sometimes be null when teleporting between multiverses if (this.loadedNearToFarBuffers != null) { - ListIterator iter = this.loadedNearToFarBuffers.listIterator(this.loadedNearToFarBuffers.size()); - while (iter.hasPrevious()) - { - LoadedRenderBuffer loadedBuffer = iter.previous(); - loadedBuffer.buffer.renderTransparent(renderContext, renderEventParam); - } + renderContext.setModelViewMatrixOffset(DhBlockPos.ZERO, renderEventParam); + + ArrayList sliceList = new ArrayList<>(); + this.loadedNearToFarBuffers.forEach(loadedBuffer -> sliceList.addAll(Arrays.asList(loadedBuffer.buffer.transparentBufferSlices))); + renderContext.drawSharedVbo(SharedVbo.TRANSPARENT, sliceList.toArray(new SharedVbo.BufferSlice[0])); } } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderer.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderer.java index 9574e2615..c7824f36a 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderer.java @@ -305,8 +305,11 @@ public class LodRenderer // terrain profiler.popPush("LOD Opaque"); ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeRenderPassEvent.class, renderEventParam); + this.bufferHandler.renderOpaque(this, renderEventParam); + + // custom objects with SSAO if (Config.Client.Advanced.Graphics.GenericRendering.enableRendering.get()) { @@ -470,6 +473,7 @@ public class LodRenderer GL32.glBlendEquation(GL32.GL_FUNC_ADD); GL32.glBlendFuncSeparate(GL32.GL_SRC_ALPHA, GL32.GL_ONE_MINUS_SRC_ALPHA, GL32.GL_ONE, GL32.GL_ONE_MINUS_SRC_ALPHA); ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeRenderPassEvent.class, renderEventParam); + this.bufferHandler.renderTransparent(this, renderEventParam); GL32.glDepthMask(true); // Apparently the depth mask state is stored in the FBO, so glState fails to restore it...