very very _very_ iritated with iris atm

This commit is contained in:
mcrcortex
2025-09-03 12:59:34 +10:00
parent aa48dbbf86
commit 37323f9170
6 changed files with 100 additions and 3 deletions

View File

@@ -151,7 +151,8 @@ public class VoxyRenderSystem {
public Viewport<?> setupViewport(ChunkRenderMatrices matrices, FogParameters fogParameters, double cameraX, double cameraY, double cameraZ) { public Viewport<?> setupViewport(ChunkRenderMatrices matrices, FogParameters fogParameters, double cameraX, double cameraY, double cameraZ) {
if (IrisUtil.irisShadowActive()) { var viewport = this.getViewport();
if (viewport == null) {
return null; return null;
} }
@@ -170,7 +171,6 @@ public class VoxyRenderSystem {
int[] dims = new int[4]; int[] dims = new int[4];
glGetIntegerv(GL_VIEWPORT, dims); glGetIntegerv(GL_VIEWPORT, dims);
var viewport = this.getViewport();
viewport viewport
.setVanillaProjection(matrices.projection()) .setVanillaProjection(matrices.projection())
.setProjection(projection) .setProjection(projection)
@@ -354,6 +354,9 @@ public class VoxyRenderSystem {
} }
public Viewport<?> getViewport() { public Viewport<?> getViewport() {
if (IrisUtil.irisShadowActive()) {
return null;
}
return this.viewportSelector.getViewport(); return this.viewportSelector.getViewport();
} }

View File

@@ -1,10 +1,23 @@
package me.cortex.voxy.client.core.util; package me.cortex.voxy.client.core.util;
import me.cortex.voxy.client.core.VoxyRenderSystem;
import me.cortex.voxy.client.core.rendering.Viewport;
import net.caffeinemc.mods.sodium.client.render.chunk.ChunkRenderMatrices;
import net.caffeinemc.mods.sodium.client.util.FogParameters;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import net.irisshaders.iris.Iris;
import net.irisshaders.iris.gl.IrisRenderSystem; import net.irisshaders.iris.gl.IrisRenderSystem;
import net.irisshaders.iris.shadows.ShadowRenderer; import net.irisshaders.iris.shadows.ShadowRenderer;
public class IrisUtil { public class IrisUtil {
public record CapturedViewportParameters(ChunkRenderMatrices matrices, FogParameters parameters, double x, double y, double z) {
public Viewport<?> apply(VoxyRenderSystem vrs) {
return vrs.setupViewport(this.matrices, this.parameters, this.x, this.y, this.z);
}
}
public static CapturedViewportParameters CAPTURED_VIEWPORT_PARAMETERS;
public static final boolean IRIS_INSTALLED = FabricLoader.getInstance().isModLoaded("iris"); public static final boolean IRIS_INSTALLED = FabricLoader.getInstance().isModLoaded("iris");
public static final boolean SHADER_SUPPORT = System.getProperty("voxy.enableExperimentalIrisPipeline", "false").equalsIgnoreCase("true"); public static final boolean SHADER_SUPPORT = System.getProperty("voxy.enableExperimentalIrisPipeline", "false").equalsIgnoreCase("true");
@@ -26,4 +39,12 @@ public class IrisUtil {
IrisRenderSystem.bindSamplerToUnit(i, 0); IrisRenderSystem.bindSamplerToUnit(i, 0);
} }
} }
private static boolean irisShaderPackEnabled0() {
return Iris.isPackInUseQuick();
}
public static boolean irisShaderPackEnabled() {
return IRIS_INSTALLED && irisShaderPackEnabled0();
}
} }

View File

@@ -1,5 +1,6 @@
package me.cortex.voxy.client.mixin.iris; package me.cortex.voxy.client.mixin.iris;
import me.cortex.voxy.client.core.IGetVoxyRenderSystem;
import me.cortex.voxy.client.core.util.IrisUtil; import me.cortex.voxy.client.core.util.IrisUtil;
import me.cortex.voxy.client.iris.IGetIrisVoxyPipelineData; import me.cortex.voxy.client.iris.IGetIrisVoxyPipelineData;
import me.cortex.voxy.client.iris.IGetVoxyPatchData; import me.cortex.voxy.client.iris.IGetVoxyPatchData;
@@ -9,6 +10,7 @@ import net.irisshaders.iris.gl.buffer.ShaderStorageBufferHolder;
import net.irisshaders.iris.pipeline.IrisRenderingPipeline; import net.irisshaders.iris.pipeline.IrisRenderingPipeline;
import net.irisshaders.iris.shaderpack.programs.ProgramSet; import net.irisshaders.iris.shaderpack.programs.ProgramSet;
import net.irisshaders.iris.uniforms.custom.CustomUniforms; import net.irisshaders.iris.uniforms.custom.CustomUniforms;
import net.minecraft.client.MinecraftClient;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
@@ -39,6 +41,16 @@ public class MixinIrisRenderingPipeline implements IGetVoxyPatchData, IGetIrisVo
} }
} }
@Inject(method = "beginLevelRendering", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/opengl/GlStateManager;_activeTexture(I)V", shift = At.Shift.BEFORE), remap = true)
private void voxy$injectViewportSetup(CallbackInfo ci) {
if (IrisUtil.CAPTURED_VIEWPORT_PARAMETERS != null) {
var renderer = ((IGetVoxyRenderSystem) MinecraftClient.getInstance().worldRenderer).getVoxyRenderSystem();
if (renderer != null) {
IrisUtil.CAPTURED_VIEWPORT_PARAMETERS.apply(renderer);
}
}
}
@Override @Override
public IrisShaderPatch voxy$getPatchData() { public IrisShaderPatch voxy$getPatchData() {
return this.patchData; return this.patchData;

View File

@@ -0,0 +1,52 @@
package me.cortex.voxy.client.mixin.iris;
import com.mojang.blaze3d.buffers.GpuBufferSlice;
import me.cortex.voxy.client.core.IGetVoxyRenderSystem;
import me.cortex.voxy.client.core.VoxyRenderSystem;
import me.cortex.voxy.client.core.util.IrisUtil;
import net.caffeinemc.mods.sodium.client.render.chunk.ChunkRenderMatrices;
import net.caffeinemc.mods.sodium.client.util.FogStorage;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.Camera;
import net.minecraft.client.render.RenderTickCounter;
import net.minecraft.client.render.WorldRenderer;
import net.minecraft.client.util.ObjectAllocator;
import org.joml.Matrix4f;
import org.joml.Vector4f;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import static org.lwjgl.opengl.GL11C.glViewport;
@Mixin(WorldRenderer.class)
public class MixinWorldRenderer {
@Shadow @Final private MinecraftClient client;
@Inject(method = "render", at = @At("HEAD"), order = 100)
private void voxy$injectIrisCompat(
ObjectAllocator allocator,
RenderTickCounter tickCounter,
boolean renderBlockOutline,
Camera camera,
Matrix4f positionMatrix,
Matrix4f projectionMatrix,
GpuBufferSlice fog,
Vector4f fogColor,
boolean shouldRenderSky,
CallbackInfo ci) {
if (IrisUtil.irisShaderPackEnabled()) {
var renderer = ((IGetVoxyRenderSystem) this).getVoxyRenderSystem();
if (renderer != null) {
//Fixthe fucking viewport dims, fuck iris
glViewport(0,0,MinecraftClient.getInstance().getFramebuffer().textureWidth, MinecraftClient.getInstance().getFramebuffer().textureHeight);
var pos = camera.getCameraPos();
IrisUtil.CAPTURED_VIEWPORT_PARAMETERS = new IrisUtil.CapturedViewportParameters(new ChunkRenderMatrices(projectionMatrix, positionMatrix), ((FogStorage) this.client.gameRenderer).sodium$getFogParameters(), pos.x, pos.y, pos.z);
}
}
}
}

View File

@@ -1,6 +1,8 @@
package me.cortex.voxy.client.mixin.sodium; package me.cortex.voxy.client.mixin.sodium;
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.util.IrisUtil;
import net.caffeinemc.mods.sodium.client.gl.device.CommandList; import net.caffeinemc.mods.sodium.client.gl.device.CommandList;
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;
@@ -23,7 +25,13 @@ public class MixinDefaultChunkRenderer {
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) {
renderer.renderOpaque(renderer.setupViewport(matrices, fogParameters, camera.x, camera.y, camera.z)); Viewport<?> viewport = null;
if (IrisUtil.irisShaderPackEnabled()) {
viewport = renderer.getViewport();
} else {
viewport = renderer.setupViewport(matrices, fogParameters, camera.x, camera.y, camera.z);
}
renderer.renderOpaque(viewport);
} }
} }
} }

View File

@@ -3,6 +3,7 @@
"package": "me.cortex.voxy.client.mixin", "package": "me.cortex.voxy.client.mixin",
"compatibilityLevel": "JAVA_17", "compatibilityLevel": "JAVA_17",
"client": [ "client": [
"iris.MixinWorldRenderer",
"iris.MixinPackRenderTargetDirectives", "iris.MixinPackRenderTargetDirectives",
"iris.CustomUniformsAccessor", "iris.CustomUniformsAccessor",
"iris.IrisRenderingPipelineAccessor", "iris.IrisRenderingPipelineAccessor",