From ad7660e4d65af69736aa5d1881b0a5aff73d1d64 Mon Sep 17 00:00:00 2001 From: mcrcortex <18544518+MCRcortex@users.noreply.github.com> Date: Mon, 23 Sep 2024 03:02:18 +1000 Subject: [PATCH] More and more working? --- .../java/me/cortex/voxy/client/core/VoxelCore.java | 3 +++ .../voxy/client/core/rendering/RenderService.java | 10 +++++++--- .../HierarchicalOcclusionTraverser.java | 14 ++++++++------ .../shaders/lod/hierarchical/traversal_dev.comp | 9 ++++++--- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/main/java/me/cortex/voxy/client/core/VoxelCore.java b/src/main/java/me/cortex/voxy/client/core/VoxelCore.java index b2ab638a..d00923be 100644 --- a/src/main/java/me/cortex/voxy/client/core/VoxelCore.java +++ b/src/main/java/me/cortex/voxy/client/core/VoxelCore.java @@ -120,6 +120,7 @@ public class VoxelCore { matrices.pop(); var projection = computeProjectionMat();//RenderSystem.getProjectionMatrix(); + //var projection = RenderSystem.getProjectionMatrix(); var viewport = this.renderer.getViewport(); viewport @@ -135,6 +136,8 @@ public class VoxelCore { } //TODO: use the raw depth buffer texture instead //int boundDepthBuffer = glGetNamedFramebufferAttachmentParameteri(boundFB, GL_DEPTH_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME); + + //TODO:FIXME!!! ?? this.postProcessing.setup(MinecraftClient.getInstance().getFramebuffer().textureWidth, MinecraftClient.getInstance().getFramebuffer().textureHeight, boundFB); this.renderer.renderFarAwayOpaque(viewport); 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 602ea780..c283b91a 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 @@ -79,9 +79,9 @@ public class RenderService, J extends Vi //this.nodeManager.insertTopLevelNode(WorldEngine.getWorldSectionId(0, 0,0,0)); //this.nodeManager.insertTopLevelNode(WorldEngine.getWorldSectionId(4, 0,0,0)); - final int H_WIDTH = 10; + final int H_WIDTH = 1; for (int x = -H_WIDTH; x <= H_WIDTH; x++) { - for (int y = 0; y <= 0; y++) { + for (int y = -1; y <= 0; y++) { for (int z = -H_WIDTH; z <= H_WIDTH; z++) { this.nodeManager.insertTopLevelNode(WorldEngine.getWorldSectionId(4, x, y, z)); } @@ -103,7 +103,8 @@ public class RenderService, J extends Vi //Hieracial is not an abstract thing but // the section renderer is as it might have different backends, but they all accept a buffer containing the section list - this.sectionRenderer.renderOpaque(viewport); + + //this.sectionRenderer.renderOpaque(viewport); //NOTE: need to do the upload and download tick here, after the section renderer renders the world, to ensure "stable" @@ -131,6 +132,9 @@ 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); + } this.traversal.doTraversal(viewport, depthBuffer); this.sectionRenderer.buildDrawCallsAndRenderTemporal(viewport, this.traversal.getRenderListBuffer()); diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/hierachical2/HierarchicalOcclusionTraverser.java b/src/main/java/me/cortex/voxy/client/core/rendering/hierachical2/HierarchicalOcclusionTraverser.java index 339b6471..549395eb 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/hierachical2/HierarchicalOcclusionTraverser.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/hierachical2/HierarchicalOcclusionTraverser.java @@ -10,6 +10,7 @@ import me.cortex.voxy.client.core.rendering.util.HiZBuffer; import me.cortex.voxy.client.core.rendering.Viewport; import me.cortex.voxy.client.core.rendering.util.DownloadStream; import me.cortex.voxy.client.core.rendering.util.UploadStream; +import me.cortex.voxy.common.Logger; import net.minecraft.util.math.MathHelper; import org.joml.Matrix4f; import org.joml.Vector3f; @@ -79,7 +80,7 @@ public class HierarchicalOcclusionTraverser { public HierarchicalOcclusionTraverser(NodeManager2 nodeManager, int requestBufferCount) { this.nodeManager = nodeManager; - this.requestBuffer = new GlBuffer(requestBufferCount*4L+1024).zero();//The 1024 is to assist with race condition issues + this.requestBuffer = new GlBuffer(requestBufferCount*8L+8).zero(); this.nodeBuffer = new GlBuffer(nodeManager.maxNodeCount*16L).zero(); this.maxRequestCount = requestBufferCount; @@ -111,11 +112,11 @@ public class HierarchicalOcclusionTraverser { MemoryUtil.memPutInt(ptr, viewport.height); ptr += 4; - MemoryUtil.memPutInt(ptr, NodeManager.REQUEST_QUEUE_SIZE); ptr += 4; - MemoryUtil.memPutInt(ptr, (int) (this.renderList.size()/4-1)); ptr += 4;//TODO maybe move this to a #define + MemoryUtil.memPutInt(ptr, NodeManager.REQUEST_QUEUE_SIZE); ptr += 4;//TODO maybe these to a #define + MemoryUtil.memPutInt(ptr, (int) (this.renderList.size()/4-1)); ptr += 4; //Screen space size for descending - MemoryUtil.memPutFloat(ptr, 128*128); ptr += 4; + MemoryUtil.memPutFloat(ptr, 64*64); ptr += 4; } private void bindings() { @@ -240,8 +241,9 @@ public class HierarchicalOcclusionTraverser { if (count < 0 || count > 50000) { throw new IllegalStateException("Count unexpected extreme value: " + count); } - if (count > (this.requestBuffer.size()>>2)-1) { - throw new IllegalStateException("Count over max buffer size, desync expected, aborting"); + if (count > (this.requestBuffer.size()>>3)-1) { + Logger.warn("Count over max buffer size, clamping, got count: " + count); + count = (int) ((this.requestBuffer.size()>>3)-1); } if (count > this.maxRequestCount) { System.err.println("Count larger than 'maxRequestCount', overflow captured. Overflowed by " + (count-this.maxRequestCount)); diff --git a/src/main/resources/assets/voxy/shaders/lod/hierarchical/traversal_dev.comp b/src/main/resources/assets/voxy/shaders/lod/hierarchical/traversal_dev.comp index 63a1e37d..ebe6556f 100644 --- a/src/main/resources/assets/voxy/shaders/lod/hierarchical/traversal_dev.comp +++ b/src/main/resources/assets/voxy/shaders/lod/hierarchical/traversal_dev.comp @@ -27,9 +27,12 @@ void addRequest(inout UnpackedNode node) { printf("Put node decend request"); if (!hasRequested(node)) { if (requestQueueIndex.x < requestQueueMaxSize) { - //Mark node as having a request submitted to prevent duplicate submissions - requestQueue[atomicAdd(requestQueueIndex.x, 1)] = getRawPos(node); - markRequested(node); + uint atomRes = atomicAdd(requestQueueIndex.x, 1); + if (atomRes < requestQueueMaxSize) { + //Mark node as having a request submitted to prevent duplicate submissions + requestQueue[atomRes] = getRawPos(node); + markRequested(node); + } } } }