diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/RenderService.java b/src/main/java/me/cortex/voxy/client/core/rendering/RenderService.java index e6d1e821..2f3067e6 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/RenderService.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/RenderService.java @@ -157,10 +157,10 @@ public class RenderService, J extends Vi glMemoryBarrier(GL_FRAMEBUFFER_BARRIER_BIT | GL_PIXEL_BUFFER_BARRIER_BIT); - int depthBuffer = glGetFramebufferAttachmentParameteri(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME); - if (depthBuffer == 0) { - depthBuffer = glGetFramebufferAttachmentParameteri(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME); - } + int depthBuffer = glGetFramebufferAttachmentParameteri(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME); + //if (depthBuffer == 0) { + // depthBuffer = glGetFramebufferAttachmentParameteri(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME); + //} TimingStatistics.I.start(); this.traversal.doTraversal(viewport, depthBuffer); @@ -181,7 +181,7 @@ public class RenderService, J extends Vi TimingStatistics.H.stop(); TimingStatistics.G.start(); - this.sectionRenderer.renderTemporal(depthBoundTexture); + this.sectionRenderer.renderTemporal(viewport, depthBoundTexture); TimingStatistics.G.stop(); } diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/Viewport.java b/src/main/java/me/cortex/voxy/client/core/rendering/Viewport.java index d632d45b..041dd537 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/Viewport.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/Viewport.java @@ -1,12 +1,14 @@ package me.cortex.voxy.client.core.rendering; import me.cortex.voxy.client.core.gl.GlBuffer; +import me.cortex.voxy.client.core.rendering.util.HiZBuffer; import net.minecraft.util.math.MathHelper; import org.joml.*; import java.lang.reflect.Field; public abstract class Viewport > { + public final HiZBuffer hiZBuffer = new HiZBuffer(); private static final Field planesField; static { try { @@ -46,7 +48,9 @@ public abstract class Viewport > { this.delete0(); } - protected abstract void delete0(); + protected void delete0() { + this.hiZBuffer.free(); + } public A setProjection(Matrix4f projection) { this.projection = projection; diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/hierachical/HierarchicalOcclusionTraverser.java b/src/main/java/me/cortex/voxy/client/core/rendering/hierachical/HierarchicalOcclusionTraverser.java index ba2deac8..cc203ad7 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/hierachical/HierarchicalOcclusionTraverser.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/hierachical/HierarchicalOcclusionTraverser.java @@ -67,7 +67,6 @@ public class HierarchicalOcclusionTraverser { private static final int RENDER_TRACKER_BINDING = BINDING_COUNTER++; private static final int STATISTICS_BUFFER_BINDING = BINDING_COUNTER++; - private final HiZBuffer hiZBuffer = new HiZBuffer(); private final int hizSampler = glGenSamplers(); private final AutoBindingShader traversal = Shader.makeAuto(PRINTF_processor) @@ -199,14 +198,14 @@ public class HierarchicalOcclusionTraverser { glBindBuffer(GL_DISPATCH_INDIRECT_BUFFER, this.queueMetaBuffer.id); //Bind the hiz buffer - glBindTextureUnit(0, this.hiZBuffer.getHizTextureId()); + glBindTextureUnit(0, viewport.hiZBuffer.getHizTextureId()); glBindSampler(0, this.hizSampler); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, RENDER_QUEUE_BINDING, viewport.getRenderList().id); } public void doTraversal(Viewport viewport, int depthBuffer) { //Compute the mip chain - this.hiZBuffer.buildMipChain(depthBuffer, viewport.width, viewport.height); + viewport.hiZBuffer.buildMipChain(depthBuffer, viewport.width, viewport.height); this.uploadUniform(viewport); //UploadStream.INSTANCE.commit(); //Done inside traversal @@ -344,7 +343,6 @@ public class HierarchicalOcclusionTraverser { public void free() { this.traversal.free(); this.requestBuffer.free(); - this.hiZBuffer.free(); this.nodeBuffer.free(); this.uniformBuffer.free(); this.statisticsBuffer.free(); diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/section/AbstractSectionRenderer.java b/src/main/java/me/cortex/voxy/client/core/rendering/section/AbstractSectionRenderer.java index 95e811fb..26f8d8f3 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/section/AbstractSectionRenderer.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/section/AbstractSectionRenderer.java @@ -19,7 +19,7 @@ public abstract class AbstractSectionRenderer , J extends public abstract void renderOpaque(T viewport, GlTexture depthBoundTexture); public abstract void buildDrawCalls(T viewport); - public abstract void renderTemporal(GlTexture depthBoundTexture); + public abstract void renderTemporal(T viewport, GlTexture depthBoundTexture); public abstract void renderTranslucent(T viewport, GlTexture depthBoundTexture); public abstract T createViewport(); public abstract void free(); diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/section/MDICSectionRenderer.java b/src/main/java/me/cortex/voxy/client/core/rendering/section/MDICSectionRenderer.java index a586747d..68a76b7b 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/section/MDICSectionRenderer.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/section/MDICSectionRenderer.java @@ -84,9 +84,6 @@ public class MDICSectionRenderer extends AbstractSectionRenderer { + public final GlBuffer drawCountCallBuffer = new GlBuffer(1024).zero(); + public final GlBuffer drawCallBuffer = new GlBuffer(5*4*(400_000+100_000+100_000)).zero();//400k draw calls + public final GlBuffer positionScratchBuffer = new GlBuffer(8*400000).zero();//400k positions public final GlBuffer indirectLookupBuffer = new GlBuffer(HierarchicalOcclusionTraverser.MAX_QUEUE_SIZE *4+4); public final GlBuffer visibilityBuffer; @@ -14,8 +18,12 @@ public class MDICViewport extends Viewport { @Override protected void delete0() { + super.delete0(); this.visibilityBuffer.free(); this.indirectLookupBuffer.free(); + this.drawCountCallBuffer.free(); + this.drawCallBuffer.free(); + this.positionScratchBuffer.free(); } @Override