From ea884f15835f5f435855b2bdea8f9530791945d3 Mon Sep 17 00:00:00 2001 From: mcrcortex <18544518+MCRcortex@users.noreply.github.com> Date: Tue, 2 Sep 2025 11:05:06 +1000 Subject: [PATCH] changes to samplers --- .../voxy/client/iris/IrisShaderPatch.java | 41 ++++++++++++++++++- .../iris/IrisVoxyRenderPipelineData.java | 9 ++-- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/main/java/me/cortex/voxy/client/iris/IrisShaderPatch.java b/src/main/java/me/cortex/voxy/client/iris/IrisShaderPatch.java index 3a0b9685..432eca75 100644 --- a/src/main/java/me/cortex/voxy/client/iris/IrisShaderPatch.java +++ b/src/main/java/me/cortex/voxy/client/iris/IrisShaderPatch.java @@ -5,6 +5,8 @@ import com.google.gson.annotations.JsonAdapter; import it.unimi.dsi.fastutil.ints.Int2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import me.cortex.voxy.common.Logger; import net.irisshaders.iris.shaderpack.ShaderPack; import net.irisshaders.iris.shaderpack.include.AbsolutePackPath; @@ -39,6 +41,40 @@ public class IrisShaderPatch { return ret; } } + private static final class SamplerDeserializer implements JsonDeserializer> { + @Override + public Object2ObjectLinkedOpenHashMap deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + Object2ObjectLinkedOpenHashMap ret = new Object2ObjectLinkedOpenHashMap<>(); + if (json==null) return null; + try { + if (json.isJsonArray()) { + for (var entry : json.getAsJsonArray()) { + var name = entry.getAsString(); + var type = "sampler2D"; + if (name.matches("shadowtex")) { + type = "sampler2DShadow"; + } + ret.put(name, type); + } + } else { + for (var entry : json.getAsJsonObject().entrySet()) { + String type = "sampler2D"; + if (entry.getValue().isJsonNull()) { + if (entry.getKey().matches("shadowtex")) { + type = "sampler2DShadow"; + } + } else { + type = entry.getValue().getAsString(); + } + ret.put(entry.getKey(), type); + } + } + } catch (Exception e) { + Logger.error(e); + } + return ret; + } + } public record BlendState(int buffer, boolean off, int sRBG, int dRGb, int sA, int dA) { public static BlendState ALL_OFF = new BlendState(-1, true, 0,0,0,0); @@ -110,7 +146,8 @@ public class IrisShaderPatch { public int[] opaqueDrawBuffers; public int[] translucentDrawBuffers; public String[] uniforms; - public String[] samplers; + @JsonAdapter(SamplerDeserializer.class) + public Object2ObjectLinkedOpenHashMap samplers; public String[] opaquePatchData; public String[] translucentPatchData; @JsonAdapter(SSBODeserializer.class) @@ -151,7 +188,7 @@ public class IrisShaderPatch { public String[] getUniformList() { return this.patchData.uniforms; } - public String[] getSamplerList() { + public Object2ObjectLinkedOpenHashMap getSamplerSet() { return this.patchData.samplers; } diff --git a/src/main/java/me/cortex/voxy/client/iris/IrisVoxyRenderPipelineData.java b/src/main/java/me/cortex/voxy/client/iris/IrisVoxyRenderPipelineData.java index 31872c22..10e6d909 100644 --- a/src/main/java/me/cortex/voxy/client/iris/IrisVoxyRenderPipelineData.java +++ b/src/main/java/me/cortex/voxy/client/iris/IrisVoxyRenderPipelineData.java @@ -313,7 +313,8 @@ public class IrisVoxyRenderPipelineData { } private static ImageSet createImageSet(IrisRenderingPipeline ipipe, IrisShaderPatch patch) { - Set samplerNameSet = new LinkedHashSet<>(List.of(patch.getSamplerList())); + var samplerDataSet = patch.getSamplerSet(); + Set samplerNameSet = new LinkedHashSet<>(samplerDataSet.keySet()); if (samplerNameSet.isEmpty()) return null; Set samplerSet = new LinkedHashSet<>(); SamplerHolder samplerBuilder = new SamplerHolder() { @@ -389,11 +390,7 @@ public class IrisVoxyRenderPipelineData { for (var entry : samplerSet) { samplers[i]=entry; - String samplerType = "sampler2D"; - if (entry.name.startsWith("shadowtex")) { - samplerType = "sampler2DShadow"; - } - + String samplerType = samplerDataSet.get(entry.name); builder.append("layout(binding=(BASE_SAMPLER_BINDING_INDEX+").append(i).append(")) uniform ").append(samplerType).append(" ").append(entry.name).append(";\n"); i++; }