This commit is contained in:
mcrcortex
2025-01-05 02:14:33 +10:00
parent 65244bc43d
commit 46283fec0e
10 changed files with 21 additions and 34 deletions

View File

@@ -1,28 +1,24 @@
package me.cortex.voxy.client.core.rendering; package me.cortex.voxy.client.core.rendering;
import com.mojang.datafixers.util.Either;
import me.cortex.voxy.client.core.model.ModelBakerySubsystem; import me.cortex.voxy.client.core.model.ModelBakerySubsystem;
import me.cortex.voxy.client.core.model.ModelStore; import me.cortex.voxy.client.core.model.ModelStore;
import me.cortex.voxy.client.core.rendering.building.BuiltSection; import me.cortex.voxy.client.core.rendering.building.BuiltSection;
import me.cortex.voxy.client.core.rendering.building.RenderGenerationService; import me.cortex.voxy.client.core.rendering.building.RenderGenerationService;
import me.cortex.voxy.client.core.rendering.building.SectionUpdateRouter; import me.cortex.voxy.client.core.rendering.building.SectionUpdateRouter;
import me.cortex.voxy.client.core.rendering.hierachical2.HierarchicalNodeManager; import me.cortex.voxy.client.core.rendering.hierachical.HierarchicalOcclusionTraverser;
import me.cortex.voxy.client.core.rendering.hierachical2.HierarchicalOcclusionTraverser; import me.cortex.voxy.client.core.rendering.hierachical.NodeCleaner;
import me.cortex.voxy.client.core.rendering.hierachical2.NodeCleaner; import me.cortex.voxy.client.core.rendering.hierachical.NodeManager;
import me.cortex.voxy.client.core.rendering.hierachical2.NodeManager2;
import me.cortex.voxy.client.core.rendering.section.AbstractSectionRenderer; import me.cortex.voxy.client.core.rendering.section.AbstractSectionRenderer;
import me.cortex.voxy.client.core.rendering.section.IUsesMeshlets; import me.cortex.voxy.client.core.rendering.section.IUsesMeshlets;
import me.cortex.voxy.client.core.rendering.section.MDICSectionRenderer; import me.cortex.voxy.client.core.rendering.section.MDICSectionRenderer;
import me.cortex.voxy.client.core.rendering.util.DownloadStream; import me.cortex.voxy.client.core.rendering.util.DownloadStream;
import me.cortex.voxy.client.core.rendering.util.UploadStream; import me.cortex.voxy.client.core.rendering.util.UploadStream;
import me.cortex.voxy.common.util.MessageQueue; import me.cortex.voxy.common.util.MessageQueue;
import me.cortex.voxy.common.util.Pair;
import me.cortex.voxy.common.world.WorldEngine; import me.cortex.voxy.common.world.WorldEngine;
import me.cortex.voxy.common.thread.ServiceThreadPool; import me.cortex.voxy.common.thread.ServiceThreadPool;
import me.cortex.voxy.common.world.WorldSection; import me.cortex.voxy.common.world.WorldSection;
import net.minecraft.client.render.Camera; import net.minecraft.client.render.Camera;
import java.io.File;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -38,7 +34,7 @@ public class RenderService<T extends AbstractSectionRenderer<J, ?>, J extends Vi
private final ViewportSelector<?> viewportSelector; private final ViewportSelector<?> viewportSelector;
private final AbstractSectionRenderer<J, ?> sectionRenderer; private final AbstractSectionRenderer<J, ?> sectionRenderer;
private final NodeManager2 nodeManager; private final NodeManager nodeManager;
private final NodeCleaner nodeCleaner; private final NodeCleaner nodeCleaner;
private final HierarchicalOcclusionTraverser traversal; private final HierarchicalOcclusionTraverser traversal;
private final ModelBakerySubsystem modelService; private final ModelBakerySubsystem modelService;
@@ -57,7 +53,7 @@ public class RenderService<T extends AbstractSectionRenderer<J, ?>, J extends Vi
//Do something incredibly hacky, we dont need to keep the reference to this around, so just connect and discard //Do something incredibly hacky, we dont need to keep the reference to this around, so just connect and discard
var router = new SectionUpdateRouter(); var router = new SectionUpdateRouter();
this.nodeManager = new NodeManager2(1<<21, this.sectionRenderer.getGeometryManager(), router); this.nodeManager = new NodeManager(1<<21, this.sectionRenderer.getGeometryManager(), router);
this.nodeCleaner = new NodeCleaner(this.nodeManager); this.nodeCleaner = new NodeCleaner(this.nodeManager);
this.sectionUpdateQueue = new MessageQueue<>(section -> { this.sectionUpdateQueue = new MessageQueue<>(section -> {

View File

@@ -1,4 +1,4 @@
package me.cortex.voxy.client.core.rendering.hierachical2; package me.cortex.voxy.client.core.rendering.hierachical;
import me.cortex.voxy.client.core.gl.GlBuffer; import me.cortex.voxy.client.core.gl.GlBuffer;
import me.cortex.voxy.client.core.gl.shader.Shader; import me.cortex.voxy.client.core.gl.shader.Shader;

View File

@@ -1,4 +1,4 @@
package me.cortex.voxy.client.core.rendering.hierachical2; package me.cortex.voxy.client.core.rendering.hierachical;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
@@ -14,8 +14,8 @@ import me.cortex.voxy.common.world.WorldEngine;
import net.caffeinemc.mods.sodium.client.util.MathUtil; import net.caffeinemc.mods.sodium.client.util.MathUtil;
import org.lwjgl.system.MemoryUtil; import org.lwjgl.system.MemoryUtil;
import static me.cortex.voxy.client.core.rendering.hierachical2.NodeStore.EMPTY_GEOMETRY_ID; import static me.cortex.voxy.client.core.rendering.hierachical.NodeStore.EMPTY_GEOMETRY_ID;
import static me.cortex.voxy.client.core.rendering.hierachical2.NodeStore.NODE_ID_MSK; import static me.cortex.voxy.client.core.rendering.hierachical.NodeStore.NODE_ID_MSK;
//Contains no logic to interface with the gpu, nor does it contain any gpu buffers //Contains no logic to interface with the gpu, nor does it contain any gpu buffers
public class HierarchicalNodeManager { public class HierarchicalNodeManager {

View File

@@ -1,6 +1,5 @@
package me.cortex.voxy.client.core.rendering.hierachical2; package me.cortex.voxy.client.core.rendering.hierachical;
import me.cortex.voxy.client.Voxy;
import me.cortex.voxy.client.config.VoxyConfig; import me.cortex.voxy.client.config.VoxyConfig;
import me.cortex.voxy.client.core.gl.GlBuffer; import me.cortex.voxy.client.core.gl.GlBuffer;
import me.cortex.voxy.client.core.gl.shader.Shader; import me.cortex.voxy.client.core.gl.shader.Shader;
@@ -31,7 +30,7 @@ public class HierarchicalOcclusionTraverser {
public static final int REQUEST_QUEUE_SIZE = 50; public static final int REQUEST_QUEUE_SIZE = 50;
private final NodeManager2 nodeManager; private final NodeManager nodeManager;
private final NodeCleaner nodeCleaner; private final NodeCleaner nodeCleaner;
private final GlBuffer requestBuffer; private final GlBuffer requestBuffer;
@@ -82,7 +81,7 @@ public class HierarchicalOcclusionTraverser {
.compile(); .compile();
public HierarchicalOcclusionTraverser(NodeManager2 nodeManager, NodeCleaner nodeCleaner) { public HierarchicalOcclusionTraverser(NodeManager nodeManager, NodeCleaner nodeCleaner) {
this.nodeCleaner = nodeCleaner; this.nodeCleaner = nodeCleaner;
this.nodeManager = nodeManager; this.nodeManager = nodeManager;
this.requestBuffer = new GlBuffer(REQUEST_QUEUE_SIZE*8L+8).zero(); this.requestBuffer = new GlBuffer(REQUEST_QUEUE_SIZE*8L+8).zero();

View File

@@ -1,4 +1,4 @@
package me.cortex.voxy.client.core.rendering.hierachical2; package me.cortex.voxy.client.core.rendering.hierachical;
class NodeChildRequest { class NodeChildRequest {
//Child states contain micrometadata in the top bits //Child states contain micrometadata in the top bits

View File

@@ -1,12 +1,10 @@
package me.cortex.voxy.client.core.rendering.hierachical2; package me.cortex.voxy.client.core.rendering.hierachical;
import it.unimi.dsi.fastutil.ints.IntArrayFIFOQueue; import it.unimi.dsi.fastutil.ints.IntArrayFIFOQueue;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import me.cortex.voxy.client.core.gl.GlBuffer; import me.cortex.voxy.client.core.gl.GlBuffer;
import me.cortex.voxy.client.core.gl.shader.AutoBindingShader; import me.cortex.voxy.client.core.gl.shader.AutoBindingShader;
import me.cortex.voxy.client.core.gl.shader.Shader; import me.cortex.voxy.client.core.gl.shader.Shader;
import me.cortex.voxy.client.core.gl.shader.ShaderType; import me.cortex.voxy.client.core.gl.shader.ShaderType;
import me.cortex.voxy.client.core.rendering.util.DownloadStream;
import me.cortex.voxy.client.core.rendering.util.UploadStream; import me.cortex.voxy.client.core.rendering.util.UploadStream;
import org.lwjgl.system.MemoryUtil; import org.lwjgl.system.MemoryUtil;
@@ -44,11 +42,11 @@ public class NodeCleaner {
private final IntArrayFIFOQueue idsToClear = new IntArrayFIFOQueue(); private final IntArrayFIFOQueue idsToClear = new IntArrayFIFOQueue();
private final NodeManager2 nodeManager; private final NodeManager nodeManager;
int visibilityId = 0; int visibilityId = 0;
public NodeCleaner(NodeManager2 nodeManager) { public NodeCleaner(NodeManager nodeManager) {
this.nodeManager = nodeManager; this.nodeManager = nodeManager;
this.visibilityBuffer = new GlBuffer(nodeManager.maxNodeCount*4L).zero(); this.visibilityBuffer = new GlBuffer(nodeManager.maxNodeCount*4L).zero();

View File

@@ -1,4 +1,4 @@
package me.cortex.voxy.client.core.rendering.hierachical2; package me.cortex.voxy.client.core.rendering.hierachical;
import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
@@ -24,7 +24,7 @@ import java.util.List;
// (issues related to this fix, lod updates from 0 children state to something children state, aswell as other way round) // (issues related to this fix, lod updates from 0 children state to something children state, aswell as other way round)
public class NodeManager2 { public class NodeManager {
private static final boolean VERIFY_NODE_MANAGER_OPERATIONS = VoxyCommon.isVerificationFlagOn("nodeManager"); private static final boolean VERIFY_NODE_MANAGER_OPERATIONS = VoxyCommon.isVerificationFlagOn("nodeManager");
//Assumptions: //Assumptions:
// all nodes have children (i.e. all nodes have at least one child existence bit set at all times) // all nodes have children (i.e. all nodes have at least one child existence bit set at all times)
@@ -72,7 +72,7 @@ public class NodeManager2 {
private final IntArrayList topLevelNodeIds = new IntArrayList(); private final IntArrayList topLevelNodeIds = new IntArrayList();
private int activeNodeRequestCount; private int activeNodeRequestCount;
public NodeManager2(int maxNodeCount, AbstractSectionGeometryManager geometryManager, SectionUpdateRouter updateRouter) { public NodeManager(int maxNodeCount, AbstractSectionGeometryManager geometryManager, SectionUpdateRouter updateRouter) {
if (!MathUtil.isPowerOfTwo(maxNodeCount)) { if (!MathUtil.isPowerOfTwo(maxNodeCount)) {
throw new IllegalArgumentException("Max node count must be a power of 2"); throw new IllegalArgumentException("Max node count must be a power of 2");
} }

View File

@@ -1,4 +1,4 @@
package me.cortex.voxy.client.core.rendering.hierachical2; package me.cortex.voxy.client.core.rendering.hierachical;
import me.cortex.voxy.common.util.HierarchicalBitSet; import me.cortex.voxy.common.util.HierarchicalBitSet;
import org.lwjgl.system.MemoryUtil; import org.lwjgl.system.MemoryUtil;

View File

@@ -1,4 +1,4 @@
package me.cortex.voxy.client.core.rendering.hierachical2; package me.cortex.voxy.client.core.rendering.hierachical;
class SingleNodeRequest { class SingleNodeRequest {
private final long nodePos; private final long nodePos;

View File

@@ -1,18 +1,12 @@
package me.cortex.voxy.client.core.rendering.section; package me.cortex.voxy.client.core.rendering.section;
import it.unimi.dsi.fastutil.Pair;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import it.unimi.dsi.fastutil.objects.ObjectArrayList; import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import me.cortex.voxy.client.core.gl.GlBuffer; import me.cortex.voxy.client.core.gl.GlBuffer;
import me.cortex.voxy.client.core.rendering.building.BuiltSection; import me.cortex.voxy.client.core.rendering.building.BuiltSection;
import me.cortex.voxy.client.core.rendering.hierachical2.HierarchicalOcclusionTraverser;
import me.cortex.voxy.client.core.rendering.util.BufferArena; import me.cortex.voxy.client.core.rendering.util.BufferArena;
import me.cortex.voxy.client.core.rendering.util.DownloadStream;
import me.cortex.voxy.client.core.rendering.util.UploadStream; import me.cortex.voxy.client.core.rendering.util.UploadStream;
import me.cortex.voxy.common.util.HierarchicalBitSet; import me.cortex.voxy.common.util.HierarchicalBitSet;
import me.cortex.voxy.common.util.MemoryBuffer;
import net.minecraft.client.MinecraftClient;
import net.minecraft.text.Text;
import org.lwjgl.system.MemoryUtil; import org.lwjgl.system.MemoryUtil;
import java.util.function.Consumer; import java.util.function.Consumer;