Skip to content

Commit 8b7e962

Browse files
fix: shader issues #317
1 parent 60883d6 commit 8b7e962

File tree

8 files changed

+54
-13
lines changed

8 files changed

+54
-13
lines changed

common/build.gradle

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ loom {
1010
}
1111
}
1212

13+
repositories {
14+
maven {
15+
url = "https://cursemaven.com/"
16+
}
17+
}
18+
1319
dependencies {
1420
minecraft "com.mojang:minecraft:${project.minecraft_version}"
1521
mappings loom.officialMojangMappings()
@@ -19,6 +25,8 @@ dependencies {
1925
testRuntimeOnly "org.junit.platform:junit-platform-launcher"
2026

2127
compileOnly group: 'org.spongepowered', name: 'mixin', version: '0.8.5'
28+
29+
modCompileOnly "curse.maven:irisshaders-455508:${iris_version}"
2230
}
2331

2432
test {

common/src/main/java/pro/mikey/xray/XRay.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.apache.logging.log4j.LogManager;
88
import org.apache.logging.log4j.Logger;
99
import org.lwjgl.glfw.GLFW;
10+
import pro.mikey.xray.compatability.IrisCompat;
1011
import pro.mikey.xray.screens.ScanManageScreen;
1112
import pro.mikey.xray.utils.XPlatShim;
1213
import pro.mikey.xray.core.ScanController;
@@ -26,6 +27,10 @@ public enum XRay {
2627
public static final KeyMapping OPEN_GUI_KEY = new KeyMapping(I18n.get("xray.config.open"), GLFW.GLFW_KEY_G, CATEGORY);
2728

2829
public void init() {
30+
if (XPLAT.isModLoaded("iris")) {
31+
LOGGER.info("Iris detected, enabling compatibility features.");
32+
IrisCompat.init();
33+
}
2934
}
3035

3136
public void onToggleKeyPressed() {
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package pro.mikey.xray.compatability;
2+
3+
import net.irisshaders.iris.api.v0.IrisApi;
4+
import net.irisshaders.iris.api.v0.IrisProgram;
5+
import pro.mikey.xray.core.OutlineRender;
6+
7+
public class IrisCompat {
8+
public static void init() {
9+
IrisApi.getInstance().assignPipeline(OutlineRender.LINES_NO_DEPTH, IrisProgram.LINES);
10+
}
11+
}

common/src/main/java/pro/mikey/xray/core/OutlineRender.java

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
import com.mojang.blaze3d.pipeline.BlendFunction;
66
import com.mojang.blaze3d.pipeline.RenderPipeline;
77
import com.mojang.blaze3d.pipeline.RenderTarget;
8-
import com.mojang.blaze3d.platform.DepthTestFunction;
9-
import com.mojang.blaze3d.platform.LogicOp;
108
import com.mojang.blaze3d.systems.RenderPass;
119
import com.mojang.blaze3d.systems.RenderSystem;
1210
import com.mojang.blaze3d.textures.GpuTextureView;
1311
import com.mojang.blaze3d.vertex.*;
12+
import net.irisshaders.iris.api.v0.IrisApi;
13+
import net.irisshaders.iris.api.v0.IrisProgram;
1414
import net.minecraft.client.Minecraft;
1515
import net.minecraft.client.renderer.DynamicUniforms;
1616
import net.minecraft.client.renderer.RenderPipelines;
@@ -22,29 +22,27 @@
2222
import org.joml.Matrix4fStack;
2323
import org.joml.Vector3f;
2424
import org.joml.Vector4f;
25+
import org.lwjgl.opengl.GL11;
2526
import pro.mikey.xray.XRay;
2627

2728
import java.io.Closeable;
2829
import java.util.*;
2930

3031
public class OutlineRender {
31-
public static boolean requestedRefresh = false;
3232

3333
private static final RenderSystem.AutoStorageIndexBuffer indices = RenderSystem.getSequentialBuffer(VertexFormat.Mode.LINES);
3434
private static final Map<ChunkPos, VBOHolder> vertexBuffers = new HashMap<>();
3535

3636
private static final Set<ChunkPos> chunksToRefresh = Collections.synchronizedSet(new HashSet<>());
3737

38-
public static RenderPipeline LINES_NO_DEPTH = RenderPipeline.builder(RenderPipelines.MATRICES_FOG_SNIPPET, RenderPipelines.GLOBALS_SNIPPET)
39-
.withLocation(XRay.id("pipeline/xray_lines"))
40-
.withVertexShader("core/rendertype_lines")
41-
.withFragmentShader(ResourceLocation.fromNamespaceAndPath(XRay.MOD_ID, "frag/constant_color"))
42-
.withBlend(BlendFunction.TRANSLUCENT)
43-
.withCull(false)
44-
.withVertexFormat(DefaultVertexFormat.POSITION_COLOR_NORMAL, VertexFormat.Mode.LINES)
45-
.withDepthTestFunction(DepthTestFunction.NO_DEPTH_TEST)
46-
.withColorLogic(LogicOp.NONE)
47-
.build();
38+
public static RenderPipeline LINES_NO_DEPTH = RenderPipeline.builder(RenderPipelines.MATRICES_FOG_SNIPPET, RenderPipelines.GLOBALS_SNIPPET)
39+
.withLocation(ResourceLocation.fromNamespaceAndPath(XRay.MOD_ID, "pipeline/lines_2"))
40+
.withVertexShader("core/rendertype_lines")
41+
.withFragmentShader(ResourceLocation.fromNamespaceAndPath(XRay.MOD_ID, "frag/constant_color"))
42+
.withBlend(BlendFunction.TRANSLUCENT)
43+
.withCull(false)
44+
.withVertexFormat(DefaultVertexFormat.POSITION_COLOR_NORMAL, VertexFormat.Mode.LINES)
45+
.build();
4846

4947
public static void renderBlocks(PoseStack poseStack) {
5048
if (!ScanController.INSTANCE.isXRayActive() || Minecraft.getInstance().player == null) {
@@ -139,13 +137,18 @@ public static void renderBlocks(PoseStack poseStack) {
139137
.createCommandEncoder()
140138
.createRenderPass(() -> "xray", colorTextureView, OptionalInt.empty(), depthTextureView, OptionalDouble.empty())) {
141139

140+
GL11.glDisable(GL11.GL_DEPTH_TEST);
141+
142142
renderPass.setPipeline(LINES_NO_DEPTH);
143143
RenderSystem.bindDefaultUniforms(renderPass);
144144
renderPass.setVertexBuffer(0, holder.vertexBuffer);
145145
renderPass.setIndexBuffer(gpuBuffer, indices.type());
146146
renderPass.setUniform("DynamicTransforms", gpubufferslice[0]);
147147
renderPass.setPipeline(LINES_NO_DEPTH);
148148
renderPass.drawIndexed(0, 0, holder.indexCount, 1);
149+
150+
// Re-enable depth test after drawing
151+
GL11.glEnable(GL11.GL_DEPTH_TEST);
149152
}
150153
}
151154
}

common/src/main/java/pro/mikey/xray/utils/XPlatShim.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ public interface XPlatShim {
1010
TagKey<Block> oreTag();
1111

1212
Supplier<Path> configPath();
13+
14+
boolean isModLoaded(String modId);
1315
}

fabric/src/main/java/pro/mikey/xray/fabric/XPlatShimImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,9 @@ public TagKey<Block> oreTag() {
2121
public Supplier<Path> configPath() {
2222
return configPath;
2323
}
24+
25+
@Override
26+
public boolean isModLoaded(String modId) {
27+
return FabricLoader.getInstance().isModLoaded(modId);
28+
}
2429
}

gradle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,4 @@ forge_version_range=21.9.0
2222
# Fabric
2323
loader_version=0.17.2
2424
fabric_version=0.134.0+1.21.9
25+
iris_version=7088024

neoforge/src/main/java/pro/mikey/xray/neoforge/XPlatShimImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import net.minecraft.tags.TagKey;
44
import net.minecraft.world.level.block.Block;
5+
import net.neoforged.fml.ModList;
56
import net.neoforged.fml.loading.FMLPaths;
67
import net.neoforged.neoforge.common.Tags;
78
import pro.mikey.xray.utils.XPlatShim;
@@ -21,4 +22,9 @@ public TagKey<Block> oreTag() {
2122
public Supplier<Path> configPath() {
2223
return configPath;
2324
}
25+
26+
@Override
27+
public boolean isModLoaded(String modId) {
28+
return ModList.get().isLoaded(modId);
29+
}
2430
}

0 commit comments

Comments
 (0)