From 433f3ace9f93380d68ee3c8ed5342dae08f7087e Mon Sep 17 00:00:00 2001 From: mcrcortex <{ID}+{username}@users.noreply.github.com> Date: Tue, 30 Jul 2024 10:42:33 +1000 Subject: [PATCH] Fix bakery :tm: --- .../voxy/client/core/model/ModelFactory.java | 4 +-- .../core/model/OnThreadModelBakerySystem.java | 28 ++++++++++++------- .../client/core/rendering/RenderService.java | 2 +- .../building/RenderGenerationService.java | 2 +- .../OLD/AbstractFarWorldRenderer.java | 1 - .../shaders/lod/hierarchical/screenspace.glsl | 6 ++-- 6 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/main/java/me/cortex/voxy/client/core/model/ModelFactory.java b/src/main/java/me/cortex/voxy/client/core/model/ModelFactory.java index 3a9593f0..b2f18b93 100644 --- a/src/main/java/me/cortex/voxy/client/core/model/ModelFactory.java +++ b/src/main/java/me/cortex/voxy/client/core/model/ModelFactory.java @@ -607,7 +607,7 @@ public class ModelFactory { glDeleteSamplers(this.blockSampler); } - public void addDebugInfo(List info) { - info.add("BlockModels registered: " + this.modelTexture2id.size() + "/" + (1<<16)); + public int getBakedCount() { + return this.modelTexture2id.size(); } } diff --git a/src/main/java/me/cortex/voxy/client/core/model/OnThreadModelBakerySystem.java b/src/main/java/me/cortex/voxy/client/core/model/OnThreadModelBakerySystem.java index 6387263f..c245541e 100644 --- a/src/main/java/me/cortex/voxy/client/core/model/OnThreadModelBakerySystem.java +++ b/src/main/java/me/cortex/voxy/client/core/model/OnThreadModelBakerySystem.java @@ -23,16 +23,24 @@ public class OnThreadModelBakerySystem { } public void tick() { - if (!this.blockIdQueue.isEmpty()) { - int blockId = -1; - synchronized (this.blockIdQueue) { - if (!this.blockIdQueue.isEmpty()) { - blockId = this.blockIdQueue.removeFirstInt(); - VarHandle.fullFence();//Ensure memory coherancy + //There should be a method to access the frame time IIRC, if the user framecap is unlimited lock it to like 60 fps for computation + int BUDGET = 5;//TODO: make this computed based on the remaining free time in a frame (and like div by 2 to reduce overhead) (with a min of 1) + for (int i = 0; i < BUDGET; i++) { + if (!this.blockIdQueue.isEmpty()) { + int blockId = -1; + synchronized (this.blockIdQueue) { + if (!this.blockIdQueue.isEmpty()) { + blockId = this.blockIdQueue.removeFirstInt(); + VarHandle.fullFence();//Ensure memory coherancy + } else { + break; + } } - } - if (blockId != -1) { - this.factory.addEntry(blockId); + if (blockId != -1) { + this.factory.addEntry(blockId); + } + } else { + break; } } } @@ -51,6 +59,6 @@ public class OnThreadModelBakerySystem { } public void addDebugData(List debug) { - + debug.add("MBQ/MBC: " + this.blockIdQueue.size() + "/"+ this.factory.getBakedCount());//Model bake queue/model baked count } } 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 8ceeb919..ebe92e61 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 @@ -27,7 +27,7 @@ public class RenderService { } private void consumeRenderBuildResult(BuiltSection section) { - System.err.println("Section " + WorldEngine.pprintPos(section.position)); + //System.err.println("Section " + WorldEngine.pprintPos(section.position)); section.free(); } diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/building/RenderGenerationService.java b/src/main/java/me/cortex/voxy/client/core/rendering/building/RenderGenerationService.java index f187c831..dbc277c9 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/building/RenderGenerationService.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/building/RenderGenerationService.java @@ -229,6 +229,6 @@ public class RenderGenerationService { } public void addDebugData(List debug) { - + debug.add("RMQ: " + this.taskQueue.size());//render mesh queue } } diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/geometry/OLD/AbstractFarWorldRenderer.java b/src/main/java/me/cortex/voxy/client/core/rendering/geometry/OLD/AbstractFarWorldRenderer.java index 77e715ae..edd04b3d 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/geometry/OLD/AbstractFarWorldRenderer.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/geometry/OLD/AbstractFarWorldRenderer.java @@ -142,7 +142,6 @@ public abstract class AbstractFarWorldRenderer debug) { - this.models.addDebugInfo(debug); debug.add("Geometry buffer usage: " + ((float)Math.round((this.geometry.getGeometryBufferUsage()*100000))/1000) + "%"); debug.add("Render Sections: " + this.geometry.getSectionCount()); } diff --git a/src/main/resources/assets/voxy/shaders/lod/hierarchical/screenspace.glsl b/src/main/resources/assets/voxy/shaders/lod/hierarchical/screenspace.glsl index 767088aa..1277a1ab 100644 --- a/src/main/resources/assets/voxy/shaders/lod/hierarchical/screenspace.glsl +++ b/src/main/resources/assets/voxy/shaders/lod/hierarchical/screenspace.glsl @@ -56,8 +56,10 @@ void setupScreenspace(in UnpackedNode node) { } //TODO: MORE ACCURATLY DETERMIN SCREENSPACE AREA, this can be done by computing and adding - // the projected surface area of each face which winding order faces the camera - // (this is just the dot product of 2 projected vectors afaik) + // the projected surface area of each face/quad which winding order faces the camera + // (this is just the dot product of 2 projected vectors) + + //can do a funny by not doing the perspective divide except on the output of the area //printf("Screenspace MIN: %f, %f, %f MAX: %f, %f, %f", minBB.x,minBB.y,minBB.z, maxBB.x,maxBB.y,maxBB.z);