AA
This commit is contained in:
@@ -3,6 +3,7 @@ package me.cortex.voxy.client.core.model;
|
|||||||
|
|
||||||
import it.unimi.dsi.fastutil.ints.IntLinkedOpenHashSet;
|
import it.unimi.dsi.fastutil.ints.IntLinkedOpenHashSet;
|
||||||
import me.cortex.voxy.client.core.gl.GlFramebuffer;
|
import me.cortex.voxy.client.core.gl.GlFramebuffer;
|
||||||
|
import me.cortex.voxy.client.core.rendering.building.BuiltSection;
|
||||||
import me.cortex.voxy.client.core.rendering.util.RawDownloadStream;
|
import me.cortex.voxy.client.core.rendering.util.RawDownloadStream;
|
||||||
import me.cortex.voxy.common.world.other.Mapper;
|
import me.cortex.voxy.common.world.other.Mapper;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|||||||
@@ -4,46 +4,56 @@ import me.cortex.voxy.client.config.VoxyConfig;
|
|||||||
import me.cortex.voxy.client.core.model.ModelBakerySubsystem;
|
import me.cortex.voxy.client.core.model.ModelBakerySubsystem;
|
||||||
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.hierarchical.HierarchicalOcclusionTraverser;
|
||||||
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.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.UploadStream;
|
||||||
import me.cortex.voxy.common.world.WorldEngine;
|
import me.cortex.voxy.common.world.WorldEngine;
|
||||||
import net.minecraft.client.render.Camera;
|
import net.minecraft.client.render.Camera;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class RenderService {
|
public class RenderService<T extends AbstractSectionRenderer<J>, J extends Viewport<J>> {
|
||||||
private final ViewportSelector<?> viewportSelector;
|
private final ViewportSelector<?> viewportSelector;
|
||||||
private final AbstractSectionRenderer sectionRenderer;
|
private final T sectionRenderer;
|
||||||
|
private final HierarchicalOcclusionTraverser traversal;
|
||||||
private final ModelBakerySubsystem modelService;
|
private final ModelBakerySubsystem modelService;
|
||||||
private final RenderGenerationService renderGen;
|
private final RenderGenerationService renderGen;
|
||||||
|
|
||||||
public RenderService(WorldEngine world) {
|
public RenderService(WorldEngine world) {
|
||||||
this.modelService = new ModelBakerySubsystem(world.getMapper());
|
this.modelService = new ModelBakerySubsystem(world.getMapper());
|
||||||
this.sectionRenderer = new MDICSectionRenderer();
|
this.sectionRenderer = (T) createSectionRenderer();
|
||||||
this.renderGen = new RenderGenerationService(world, this.modelService, VoxyConfig.CONFIG.renderThreads, this::consumeRenderBuildResult, false);
|
this.renderGen = new RenderGenerationService(world, this.modelService, VoxyConfig.CONFIG.renderThreads, this::consumeBuiltSection, false);
|
||||||
|
this.traversal = new HierarchicalOcclusionTraverser(this.renderGen, null);
|
||||||
|
|
||||||
|
world.setDirtyCallback(section -> System.out.println("Section updated!!: " + WorldEngine.pprintPos(section.key)));
|
||||||
|
|
||||||
this.viewportSelector = new ViewportSelector<>(this.sectionRenderer::createViewport);
|
this.viewportSelector = new ViewportSelector<>(this.sectionRenderer::createViewport);
|
||||||
|
|
||||||
|
|
||||||
for(int x = -200; x<=200;x++) {
|
for(int x = -400; x<=400;x++) {
|
||||||
for (int z = -200; z <= 200; z++) {
|
for (int z = -400; z <= 400; z++) {
|
||||||
for (int y = -3; y <= 3; y++) {
|
for (int y = -6; y <= 6; y++) {
|
||||||
this.renderGen.enqueueTask(0, x, y, z);
|
this.renderGen.enqueueTask(0, x, y, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void consumeRenderBuildResult(BuiltSection section) {
|
private void consumeBuiltSection(BuiltSection section) {
|
||||||
//System.err.println("Section " + WorldEngine.pprintPos(section.position));
|
this.traversal.consumeBuiltSection(section);
|
||||||
section.free();
|
}
|
||||||
|
|
||||||
|
private static AbstractSectionRenderer<?> createSectionRenderer() {
|
||||||
|
return new MDICSectionRenderer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setup(Camera camera) {
|
public void setup(Camera camera) {
|
||||||
this.modelService.tick();
|
this.modelService.tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renderFarAwayOpaque(Viewport viewport) {
|
public void renderFarAwayOpaque(J viewport) {
|
||||||
//Render previous geometry with the abstract renderer
|
//Render previous geometry with the abstract renderer
|
||||||
//Execute the hieracial selector
|
//Execute the hieracial selector
|
||||||
// render delta sections
|
// render delta sections
|
||||||
@@ -51,10 +61,19 @@ public class RenderService {
|
|||||||
//Hieracial is not an abstract thing but
|
//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
|
// the section renderer is as it might have different backends, but they all accept a buffer containing the section list
|
||||||
|
|
||||||
|
this.sectionRenderer.renderOpaque(viewport);
|
||||||
|
//NOTE: need to do the upload and download tick here, after the section renderer renders the world, to ensure "stable"
|
||||||
|
// sections
|
||||||
|
UploadStream.INSTANCE.tick();
|
||||||
|
DownloadStream.INSTANCE.tick();
|
||||||
|
|
||||||
|
this.traversal.doTraversal(viewport);
|
||||||
|
|
||||||
|
this.sectionRenderer.buildDrawCallsAndRenderTemporal(viewport, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renderFarAwayTranslucent(Viewport viewport) {
|
public void renderFarAwayTranslucent(J viewport) {
|
||||||
|
this.sectionRenderer.renderTranslucent(viewport);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addDebugData(List<String> debug) {
|
public void addDebugData(List<String> debug) {
|
||||||
@@ -66,6 +85,8 @@ public class RenderService {
|
|||||||
this.modelService.shutdown();
|
this.modelService.shutdown();
|
||||||
this.renderGen.shutdown();
|
this.renderGen.shutdown();
|
||||||
this.viewportSelector.free();
|
this.viewportSelector.free();
|
||||||
|
this.sectionRenderer.free();
|
||||||
|
this.traversal.free();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Viewport<?> getViewport() {
|
public Viewport<?> getViewport() {
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package me.cortex.voxy.client.core.rendering.hierarchical;
|
||||||
|
|
||||||
|
import me.cortex.voxy.client.core.rendering.Viewport;
|
||||||
|
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.section.AbstractSectionGeometryManager;
|
||||||
|
|
||||||
|
public class HierarchicalOcclusionTraverser {
|
||||||
|
public HierarchicalOcclusionTraverser(RenderGenerationService renderGenerationService, AbstractSectionGeometryManager sectionGeometryManager) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void doTraversal(Viewport<?> viewport) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void free() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void consumeBuiltSection(BuiltSection section) {
|
||||||
|
section.free();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package me.cortex.voxy.client.core.rendering.section;
|
||||||
|
|
||||||
|
public abstract class AbstractSectionGeometryManager {
|
||||||
|
}
|
||||||
@@ -9,6 +9,6 @@ public abstract class AbstractSectionRenderer <T extends Viewport<T>> {
|
|||||||
public abstract void renderOpaque(T viewport);
|
public abstract void renderOpaque(T viewport);
|
||||||
public abstract void buildDrawCallsAndRenderTemporal(T viewport, GlBuffer sectionRenderList);
|
public abstract void buildDrawCallsAndRenderTemporal(T viewport, GlBuffer sectionRenderList);
|
||||||
public abstract void renderTranslucent(T viewport);
|
public abstract void renderTranslucent(T viewport);
|
||||||
|
|
||||||
public abstract T createViewport();
|
public abstract T createViewport();
|
||||||
|
public abstract void free();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,8 +6,6 @@ import me.cortex.voxy.client.core.rendering.geometry.OLD.Gl46HierarchicalViewpor
|
|||||||
|
|
||||||
//Uses MDIC to render the sections
|
//Uses MDIC to render the sections
|
||||||
public class MDICSectionRenderer extends AbstractSectionRenderer<BasicViewport> {
|
public class MDICSectionRenderer extends AbstractSectionRenderer<BasicViewport> {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderOpaque(BasicViewport viewport) {
|
public void renderOpaque(BasicViewport viewport) {
|
||||||
|
|
||||||
@@ -27,4 +25,9 @@ public class MDICSectionRenderer extends AbstractSectionRenderer<BasicViewport>
|
|||||||
public BasicViewport createViewport() {
|
public BasicViewport createViewport() {
|
||||||
return new BasicViewport();
|
return new BasicViewport();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void free() {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,6 +62,8 @@ public class ActiveSectionTracker {
|
|||||||
System.err.println("Unable to load section " + section.key + " setting to air");
|
System.err.println("Unable to load section " + section.key + " setting to air");
|
||||||
status = 1;
|
status = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: REWRITE THE section tracker _again_ to not be so shit and jank, and so that Arrays.fill is not 10% of the execution time
|
||||||
if (status == 1) {
|
if (status == 1) {
|
||||||
//We need to set the data to air as it is undefined state
|
//We need to set the data to air as it is undefined state
|
||||||
Arrays.fill(section.data, Mapper.withLight(Mapper.AIR, 15));//Since lighting is inverted
|
Arrays.fill(section.data, Mapper.withLight(Mapper.AIR, 15));//Since lighting is inverted
|
||||||
|
|||||||
Reference in New Issue
Block a user