Ref D
This commit is contained in:
@@ -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 -> {
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -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 {
|
||||||
@@ -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();
|
||||||
@@ -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
|
||||||
@@ -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();
|
||||||
|
|
||||||
@@ -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");
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
@@ -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;
|
||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user