Add occlusion debug util
This commit is contained in:
@@ -59,4 +59,12 @@ public class VoxyClient implements ClientModInitializer {
|
|||||||
public static boolean isFrexActive() {
|
public static boolean isFrexActive() {
|
||||||
return !FREX.isEmpty();
|
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.RenderStatistics;
|
||||||
import me.cortex.voxy.client.TimingStatistics;
|
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.model.ModelBakerySubsystem;
|
||||||
import me.cortex.voxy.client.core.rendering.Viewport;
|
import me.cortex.voxy.client.core.rendering.Viewport;
|
||||||
import me.cortex.voxy.client.core.rendering.hierachical.AsyncNodeManager;
|
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.section.AbstractSectionRenderer;
|
||||||
import me.cortex.voxy.client.core.rendering.util.DownloadStream;
|
import me.cortex.voxy.client.core.rendering.util.DownloadStream;
|
||||||
import me.cortex.voxy.common.util.TrackedObject;
|
import me.cortex.voxy.common.util.TrackedObject;
|
||||||
|
import me.cortex.voxy.commonImpl.VoxyCommon;
|
||||||
import org.joml.Matrix4f;
|
import org.joml.Matrix4f;
|
||||||
import org.lwjgl.opengl.GL30;
|
import org.lwjgl.opengl.GL30;
|
||||||
import org.lwjgl.system.MemoryUtil;
|
import org.lwjgl.system.MemoryUtil;
|
||||||
@@ -86,8 +87,13 @@ public abstract class AbstractRenderPipeline extends TrackedObject {
|
|||||||
|
|
||||||
var rs = ((AbstractSectionRenderer)this.sectionRenderer);
|
var rs = ((AbstractSectionRenderer)this.sectionRenderer);
|
||||||
rs.renderOpaque(viewport);
|
rs.renderOpaque(viewport);
|
||||||
|
var occlusionDebug = VoxyClient.getOcclusionDebugState();
|
||||||
|
if (occlusionDebug==0) {
|
||||||
this.innerPrimaryWork(viewport, depthTexture);
|
this.innerPrimaryWork(viewport, depthTexture);
|
||||||
|
}
|
||||||
|
if (occlusionDebug<=1) {
|
||||||
rs.buildDrawCalls(viewport);
|
rs.buildDrawCalls(viewport);
|
||||||
|
}
|
||||||
rs.renderTemporal(viewport);
|
rs.renderTemporal(viewport);
|
||||||
|
|
||||||
this.postOpaquePreTranslucent(viewport);
|
this.postOpaquePreTranslucent(viewport);
|
||||||
|
|||||||
@@ -197,7 +197,10 @@ public class VoxyRenderSystem {
|
|||||||
.setScreenSize(width, height)
|
.setScreenSize(width, height)
|
||||||
.setFogParameters(fogParameters)
|
.setFogParameters(fogParameters)
|
||||||
.update();
|
.update();
|
||||||
|
|
||||||
|
if (VoxyClient.getOcclusionDebugState()==0) {
|
||||||
viewport.frameId++;
|
viewport.frameId++;
|
||||||
|
}
|
||||||
|
|
||||||
return viewport;
|
return viewport;
|
||||||
}
|
}
|
||||||
@@ -240,7 +243,7 @@ public class VoxyRenderSystem {
|
|||||||
this.pipeline.preSetup(viewport);
|
this.pipeline.preSetup(viewport);
|
||||||
|
|
||||||
TimingStatistics.E.start();
|
TimingStatistics.E.start();
|
||||||
if (!IrisUtil.irisShadowActive()) {
|
if ((!VoxyClient.disableSodiumChunkRender())&&!IrisUtil.irisShadowActive()) {
|
||||||
this.chunkBoundRenderer.render(viewport);
|
this.chunkBoundRenderer.render(viewport);
|
||||||
} else {
|
} else {
|
||||||
viewport.depthBoundingBuffer.clear(0);
|
viewport.depthBoundingBuffer.clear(0);
|
||||||
|
|||||||
@@ -1,27 +1,52 @@
|
|||||||
package me.cortex.voxy.client.mixin.sodium;
|
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.IGetVoxyRenderSystem;
|
||||||
import me.cortex.voxy.client.core.rendering.Viewport;
|
import me.cortex.voxy.client.core.rendering.Viewport;
|
||||||
import me.cortex.voxy.client.core.util.IrisUtil;
|
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.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.ChunkRenderMatrices;
|
||||||
import net.caffeinemc.mods.sodium.client.render.chunk.DefaultChunkRenderer;
|
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.lists.ChunkRenderListIterable;
|
||||||
import net.caffeinemc.mods.sodium.client.render.chunk.terrain.DefaultTerrainRenderPasses;
|
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.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.render.viewport.CameraTransform;
|
||||||
import net.caffeinemc.mods.sodium.client.util.FogParameters;
|
import net.caffeinemc.mods.sodium.client.util.FogParameters;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
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.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
@Mixin(value = DefaultChunkRenderer.class, remap = false)
|
@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))
|
@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) {
|
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) {
|
if (renderPass == DefaultTerrainRenderPasses.CUTOUT) {
|
||||||
var renderer = ((IGetVoxyRenderSystem) MinecraftClient.getInstance().worldRenderer).getVoxyRenderSystem();
|
var renderer = ((IGetVoxyRenderSystem) MinecraftClient.getInstance().worldRenderer).getVoxyRenderSystem();
|
||||||
if (renderer != null) {
|
if (renderer != null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user