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) {
|
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user