very very _very_ iritated with iris atm
This commit is contained in:
@@ -151,7 +151,8 @@ public class VoxyRenderSystem {
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -170,7 +171,6 @@ public class VoxyRenderSystem {
|
||||
int[] dims = new int[4];
|
||||
glGetIntegerv(GL_VIEWPORT, dims);
|
||||
|
||||
var viewport = this.getViewport();
|
||||
viewport
|
||||
.setVanillaProjection(matrices.projection())
|
||||
.setProjection(projection)
|
||||
@@ -354,6 +354,9 @@ public class VoxyRenderSystem {
|
||||
}
|
||||
|
||||
public Viewport<?> getViewport() {
|
||||
if (IrisUtil.irisShadowActive()) {
|
||||
return null;
|
||||
}
|
||||
return this.viewportSelector.getViewport();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,23 @@
|
||||
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.irisshaders.iris.Iris;
|
||||
import net.irisshaders.iris.gl.IrisRenderSystem;
|
||||
import net.irisshaders.iris.shadows.ShadowRenderer;
|
||||
|
||||
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 SHADER_SUPPORT = System.getProperty("voxy.enableExperimentalIrisPipeline", "false").equalsIgnoreCase("true");
|
||||
|
||||
@@ -26,4 +39,12 @@ public class IrisUtil {
|
||||
IrisRenderSystem.bindSamplerToUnit(i, 0);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean irisShaderPackEnabled0() {
|
||||
return Iris.isPackInUseQuick();
|
||||
}
|
||||
|
||||
public static boolean irisShaderPackEnabled() {
|
||||
return IRIS_INSTALLED && irisShaderPackEnabled0();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
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.iris.IGetIrisVoxyPipelineData;
|
||||
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.shaderpack.programs.ProgramSet;
|
||||
import net.irisshaders.iris.uniforms.custom.CustomUniforms;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
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
|
||||
public IrisShaderPatch voxy$getPatchData() {
|
||||
return this.patchData;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
package me.cortex.voxy.client.mixin.sodium;
|
||||
|
||||
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.render.chunk.ChunkRenderMatrices;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.DefaultChunkRenderer;
|
||||
@@ -23,7 +25,13 @@ public class MixinDefaultChunkRenderer {
|
||||
if (renderPass == DefaultTerrainRenderPasses.CUTOUT) {
|
||||
var renderer = ((IGetVoxyRenderSystem) MinecraftClient.getInstance().worldRenderer).getVoxyRenderSystem();
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"package": "me.cortex.voxy.client.mixin",
|
||||
"compatibilityLevel": "JAVA_17",
|
||||
"client": [
|
||||
"iris.MixinWorldRenderer",
|
||||
"iris.MixinPackRenderTargetDirectives",
|
||||
"iris.CustomUniformsAccessor",
|
||||
"iris.IrisRenderingPipelineAccessor",
|
||||
|
||||
Reference in New Issue
Block a user