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;
import com.mojang.datafixers.util.Either;
import me.cortex.voxy.client.core.model.ModelBakerySubsystem;
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.RenderGenerationService;
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.hierachical2.HierarchicalOcclusionTraverser;
import me.cortex.voxy.client.core.rendering.hierachical2.NodeCleaner;
import me.cortex.voxy.client.core.rendering.hierachical2.NodeManager2;
import me.cortex.voxy.client.core.rendering.hierachical.HierarchicalOcclusionTraverser;
import me.cortex.voxy.client.core.rendering.hierachical.NodeCleaner;
import me.cortex.voxy.client.core.rendering.hierachical.NodeManager;
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.MDICSectionRenderer;
import me.cortex.voxy.client.core.rendering.util.DownloadStream;
import me.cortex.voxy.client.core.rendering.util.UploadStream;
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.thread.ServiceThreadPool;
import me.cortex.voxy.common.world.WorldSection;
import net.minecraft.client.render.Camera;
import java.io.File;
import java.util.Arrays;
import java.util.List;
@@ -38,7 +34,7 @@ public class RenderService<T extends AbstractSectionRenderer<J, ?>, J extends Vi
private final ViewportSelector<?> viewportSelector;
private final AbstractSectionRenderer<J, ?> sectionRenderer;
private final NodeManager2 nodeManager;
private final NodeManager nodeManager;
private final NodeCleaner nodeCleaner;
private final HierarchicalOcclusionTraverser traversal;
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
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.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.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;
@@ -14,8 +14,8 @@ import me.cortex.voxy.common.world.WorldEngine;
import net.caffeinemc.mods.sodium.client.util.MathUtil;
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.hierachical2.NodeStore.NODE_ID_MSK;
import static me.cortex.voxy.client.core.rendering.hierachical.NodeStore.EMPTY_GEOMETRY_ID;
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
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.core.gl.GlBuffer;
import me.cortex.voxy.client.core.gl.shader.Shader;
@@ -31,7 +30,7 @@ public class HierarchicalOcclusionTraverser {
public static final int REQUEST_QUEUE_SIZE = 50;
private final NodeManager2 nodeManager;
private final NodeManager nodeManager;
private final NodeCleaner nodeCleaner;
private final GlBuffer requestBuffer;
@@ -82,7 +81,7 @@ public class HierarchicalOcclusionTraverser {
.compile();
public HierarchicalOcclusionTraverser(NodeManager2 nodeManager, NodeCleaner nodeCleaner) {
public HierarchicalOcclusionTraverser(NodeManager nodeManager, NodeCleaner nodeCleaner) {
this.nodeCleaner = nodeCleaner;
this.nodeManager = nodeManager;
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 {
//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.IntArrayList;
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.Shader;
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 org.lwjgl.system.MemoryUtil;
@@ -44,11 +42,11 @@ public class NodeCleaner {
private final IntArrayFIFOQueue idsToClear = new IntArrayFIFOQueue();
private final NodeManager2 nodeManager;
private final NodeManager nodeManager;
int visibilityId = 0;
public NodeCleaner(NodeManager2 nodeManager) {
public NodeCleaner(NodeManager nodeManager) {
this.nodeManager = nodeManager;
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.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)
public class NodeManager2 {
public class NodeManager {
private static final boolean VERIFY_NODE_MANAGER_OPERATIONS = VoxyCommon.isVerificationFlagOn("nodeManager");
//Assumptions:
// 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 int activeNodeRequestCount;
public NodeManager2(int maxNodeCount, AbstractSectionGeometryManager geometryManager, SectionUpdateRouter updateRouter) {
public NodeManager(int maxNodeCount, AbstractSectionGeometryManager geometryManager, SectionUpdateRouter updateRouter) {
if (!MathUtil.isPowerOfTwo(maxNodeCount)) {
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 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 {
private final long nodePos;

View File

@@ -1,18 +1,12 @@
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.objects.ObjectArrayList;
import me.cortex.voxy.client.core.gl.GlBuffer;
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.DownloadStream;
import me.cortex.voxy.client.core.rendering.util.UploadStream;
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 java.util.function.Consumer;