Add occlusion debug util
This commit is contained in:
@@ -59,4 +59,12 @@ public class VoxyClient implements ClientModInitializer {
|
||||
public static boolean isFrexActive() {
|
||||
return !FREX.isEmpty();
|
||||
}
|
||||
|
||||
public static int getOcclusionDebugState() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static boolean disableSodiumChunkRender() {
|
||||
return getOcclusionDebugState() != 0;
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@ package me.cortex.voxy.client.core;
|
||||
|
||||
import me.cortex.voxy.client.RenderStatistics;
|
||||
import me.cortex.voxy.client.TimingStatistics;
|
||||
import me.cortex.voxy.client.core.gl.Capabilities;
|
||||
import me.cortex.voxy.client.VoxyClient;
|
||||
import me.cortex.voxy.client.core.model.ModelBakerySubsystem;
|
||||
import me.cortex.voxy.client.core.rendering.Viewport;
|
||||
import me.cortex.voxy.client.core.rendering.hierachical.AsyncNodeManager;
|
||||
@@ -12,6 +12,7 @@ import me.cortex.voxy.client.core.rendering.post.FullscreenBlit;
|
||||
import me.cortex.voxy.client.core.rendering.section.AbstractSectionRenderer;
|
||||
import me.cortex.voxy.client.core.rendering.util.DownloadStream;
|
||||
import me.cortex.voxy.common.util.TrackedObject;
|
||||
import me.cortex.voxy.commonImpl.VoxyCommon;
|
||||
import org.joml.Matrix4f;
|
||||
import org.lwjgl.opengl.GL30;
|
||||
import org.lwjgl.system.MemoryUtil;
|
||||
@@ -86,8 +87,13 @@ public abstract class AbstractRenderPipeline extends TrackedObject {
|
||||
|
||||
var rs = ((AbstractSectionRenderer)this.sectionRenderer);
|
||||
rs.renderOpaque(viewport);
|
||||
var occlusionDebug = VoxyClient.getOcclusionDebugState();
|
||||
if (occlusionDebug==0) {
|
||||
this.innerPrimaryWork(viewport, depthTexture);
|
||||
}
|
||||
if (occlusionDebug<=1) {
|
||||
rs.buildDrawCalls(viewport);
|
||||
}
|
||||
rs.renderTemporal(viewport);
|
||||
|
||||
this.postOpaquePreTranslucent(viewport);
|
||||
|
||||
@@ -197,7 +197,10 @@ public class VoxyRenderSystem {
|
||||
.setScreenSize(width, height)
|
||||
.setFogParameters(fogParameters)
|
||||
.update();
|
||||
|
||||
if (VoxyClient.getOcclusionDebugState()==0) {
|
||||
viewport.frameId++;
|
||||
}
|
||||
|
||||
return viewport;
|
||||
}
|
||||
@@ -240,7 +243,7 @@ public class VoxyRenderSystem {
|
||||
this.pipeline.preSetup(viewport);
|
||||
|
||||
TimingStatistics.E.start();
|
||||
if (!IrisUtil.irisShadowActive()) {
|
||||
if ((!VoxyClient.disableSodiumChunkRender())&&!IrisUtil.irisShadowActive()) {
|
||||
this.chunkBoundRenderer.render(viewport);
|
||||
} else {
|
||||
viewport.depthBoundingBuffer.clear(0);
|
||||
|
||||
@@ -1,27 +1,52 @@
|
||||
package me.cortex.voxy.client.mixin.sodium;
|
||||
|
||||
import me.cortex.voxy.client.VoxyClient;
|
||||
import me.cortex.voxy.client.core.IGetVoxyRenderSystem;
|
||||
import me.cortex.voxy.client.core.rendering.Viewport;
|
||||
import me.cortex.voxy.client.core.util.IrisUtil;
|
||||
import me.cortex.voxy.commonImpl.VoxyCommon;
|
||||
import net.caffeinemc.mods.sodium.client.gl.device.CommandList;
|
||||
import net.caffeinemc.mods.sodium.client.gl.device.RenderDevice;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.ChunkRenderMatrices;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.DefaultChunkRenderer;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.ShaderChunkRenderer;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.lists.ChunkRenderListIterable;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.terrain.DefaultTerrainRenderPasses;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.terrain.TerrainRenderPass;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.vertex.format.ChunkVertexType;
|
||||
import net.caffeinemc.mods.sodium.client.render.viewport.CameraTransform;
|
||||
import net.caffeinemc.mods.sodium.client.util.FogParameters;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(value = DefaultChunkRenderer.class, remap = false)
|
||||
public class MixinDefaultChunkRenderer {
|
||||
public abstract class MixinDefaultChunkRenderer extends ShaderChunkRenderer {
|
||||
|
||||
public MixinDefaultChunkRenderer(RenderDevice device, ChunkVertexType vertexType) {
|
||||
super(device, vertexType);
|
||||
}
|
||||
|
||||
@Inject(method = "render", at = @At(value = "HEAD"), cancellable = true)
|
||||
private void cancelThingie(ChunkRenderMatrices matrices, CommandList commandList, ChunkRenderListIterable renderLists, TerrainRenderPass renderPass, CameraTransform camera, FogParameters fogParameters, boolean indexedRenderingEnabled, CallbackInfo ci) {
|
||||
if (VoxyClient.disableSodiumChunkRender()) {
|
||||
super.begin(renderPass, fogParameters);
|
||||
this.doRender(matrices, renderPass, camera, fogParameters);
|
||||
super.end(renderPass);
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/render/chunk/ShaderChunkRenderer;end(Lnet/caffeinemc/mods/sodium/client/render/chunk/terrain/TerrainRenderPass;)V", shift = At.Shift.BEFORE))
|
||||
private void injectRender(ChunkRenderMatrices matrices, CommandList commandList, ChunkRenderListIterable renderLists, TerrainRenderPass renderPass, CameraTransform camera, FogParameters fogParameters, boolean indexedRenderingEnabled, CallbackInfo ci) {
|
||||
this.doRender(matrices, renderPass, camera, fogParameters);
|
||||
}
|
||||
|
||||
@Unique
|
||||
private void doRender(ChunkRenderMatrices matrices, TerrainRenderPass renderPass, CameraTransform camera, FogParameters fogParameters) {
|
||||
if (renderPass == DefaultTerrainRenderPasses.CUTOUT) {
|
||||
var renderer = ((IGetVoxyRenderSystem) MinecraftClient.getInstance().worldRenderer).getVoxyRenderSystem();
|
||||
if (renderer != null) {
|
||||
|
||||
Reference in New Issue
Block a user