Partial compatibility with vivecraft
This commit is contained in:
@@ -58,8 +58,10 @@ dependencies {
|
||||
include(modImplementation("maven.modrinth:cloth-config:13.0.121+fabric"))
|
||||
modImplementation("maven.modrinth:modmenu:9.0.0")
|
||||
modCompileOnly("maven.modrinth:iris:1.6.17+1.20.4")
|
||||
modCompileOnly("maven.modrinth:starlight:1.1.3+1.20.4")
|
||||
//modRuntimeOnly("maven.modrinth:iris:1.6.17+1.20.4")
|
||||
modCompileOnly("maven.modrinth:starlight:1.1.3+1.20.4")
|
||||
//modCompileOnly("maven.modrinth:immersiveportals:v5.1.7-mc1.20.4")
|
||||
modCompileOnly("maven.modrinth:vivecraft:1.20.4-1.1.6-fabric")
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ yarn_mappings=1.20.4+build.1
|
||||
loader_version=0.15.1
|
||||
|
||||
# Mod Properties
|
||||
mod_version = 0.1.3-alpha
|
||||
mod_version = 0.1.4-alpha
|
||||
maven_group = me.cortex
|
||||
archives_base_name = voxy
|
||||
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package me.cortex.voxy.client.core;
|
||||
|
||||
import me.cortex.voxy.client.core.rendering.AbstractFarWorldRenderer;
|
||||
import me.cortex.voxy.client.core.rendering.Viewport;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import org.vivecraft.client_vr.ClientDataHolderVR;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class ViewportSelector <T extends Viewport> {
|
||||
public static final boolean VIVECRAFT_INSTALLED = FabricLoader.getInstance().isModLoaded("vivecraft");
|
||||
|
||||
private final Supplier<T> creator;
|
||||
private final T defaultViewport;
|
||||
private final Map<Object, T> extraViewports = new HashMap<>();
|
||||
|
||||
public ViewportSelector(Supplier<T> viewportCreator) {
|
||||
this.creator = viewportCreator;
|
||||
this.defaultViewport = viewportCreator.get();
|
||||
}
|
||||
|
||||
private T getVivecraftViewport() {
|
||||
var cdh = ClientDataHolderVR.getInstance();
|
||||
var pass = cdh.currentPass;
|
||||
if (pass == null) {
|
||||
return this.defaultViewport;
|
||||
}
|
||||
return this.extraViewports.computeIfAbsent(pass, a->this.creator.get());
|
||||
}
|
||||
|
||||
public T getViewport() {
|
||||
if (VIVECRAFT_INSTALLED) {
|
||||
return getVivecraftViewport();
|
||||
}
|
||||
return this.defaultViewport;
|
||||
}
|
||||
|
||||
public void free() {
|
||||
this.defaultViewport.delete();
|
||||
this.extraViewports.values().forEach(Viewport::delete);
|
||||
this.extraViewports.clear();
|
||||
}
|
||||
}
|
||||
@@ -49,7 +49,7 @@ public class VoxelCore {
|
||||
private final RenderTracker renderTracker;
|
||||
|
||||
private final AbstractFarWorldRenderer renderer;
|
||||
private Viewport viewport;
|
||||
private final ViewportSelector viewportSelector;
|
||||
private final PostProcessing postProcessing;
|
||||
|
||||
//private final Thread shutdownThread = new Thread(this::shutdown);
|
||||
@@ -62,7 +62,7 @@ public class VoxelCore {
|
||||
//Trigger the shared index buffer loading
|
||||
SharedIndexBuffer.INSTANCE.id();
|
||||
this.renderer = new Gl46FarWorldRenderer(VoxyConfig.CONFIG.geometryBufferSize, VoxyConfig.CONFIG.maxSections);
|
||||
this.viewport = this.renderer.createViewport();
|
||||
this.viewportSelector = new ViewportSelector<>(this.renderer::createViewport);
|
||||
System.out.println("Renderer initialized");
|
||||
|
||||
this.renderTracker = new RenderTracker(this.world, this.renderer);
|
||||
@@ -155,12 +155,13 @@ public class VoxelCore {
|
||||
//fb.bind();
|
||||
|
||||
var projection = computeProjectionMat();
|
||||
this.viewport.setProjection(projection).setModelView(matrices.peek().getPositionMatrix()).setCamera(cameraX, cameraY, cameraZ);
|
||||
var viewport = this.viewportSelector.getViewport();
|
||||
viewport.setProjection(projection).setModelView(matrices.peek().getPositionMatrix()).setCamera(cameraX, cameraY, cameraZ);
|
||||
|
||||
int boundFB = GL11.glGetInteger(GL_DRAW_FRAMEBUFFER_BINDING);
|
||||
this.postProcessing.setup(MinecraftClient.getInstance().getFramebuffer().textureWidth, MinecraftClient.getInstance().getFramebuffer().textureHeight, boundFB);
|
||||
|
||||
this.renderer.renderFarAwayOpaque(this.viewport);
|
||||
this.renderer.renderFarAwayOpaque(viewport);
|
||||
|
||||
//Compute the SSAO of the rendered terrain
|
||||
this.postProcessing.computeSSAO(projection, matrices);
|
||||
@@ -199,7 +200,7 @@ public class VoxelCore {
|
||||
System.out.println("Render gen shut down");
|
||||
try {this.world.shutdown();} catch (Exception e) {System.err.println(e);}
|
||||
System.out.println("World engine shut down");
|
||||
try {this.renderer.shutdown(); if (viewport!=null)this.viewport.delete();} catch (Exception e) {System.err.println(e);}
|
||||
try {this.renderer.shutdown(); this.viewportSelector.free();} catch (Exception e) {System.err.println(e);}
|
||||
System.out.println("Renderer shut down");
|
||||
if (this.postProcessing!=null){try {this.postProcessing.shutdown();} catch (Exception e) {System.err.println(e);}}
|
||||
System.out.println("Voxel core shut down");
|
||||
|
||||
Reference in New Issue
Block a user