From 5d118fad5e5f2dcc3d61c3fdb98edddfa128fb4f Mon Sep 17 00:00:00 2001 From: Pyrofab Date: Wed, 7 Jun 2023 00:30:07 +0200 Subject: [PATCH] Fix managed sampler uniforms breaking on reload --- changelog.md | 15 +++++++++++++++ gradle.properties | 2 +- .../satin/impl/ManagedSamplerUniformBase.java | 12 ++++++++++++ .../satin/impl/ManagedSamplerUniformV1.java | 3 ++- .../satin/impl/ManagedSamplerUniformV2.java | 5 +++++ 5 files changed, 35 insertions(+), 2 deletions(-) diff --git a/changelog.md b/changelog.md index d1821f7..20cb567 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,12 @@ +------------------------------------------------------ +Version 1.12.1 +------------------------------------------------------ +**Changes** +- Optimized shader loading (should now be faster) + +**Fixes** +- Fixed managed sampler uniforms losing data upon resource reloading (Ported fix from v1.10.1 to MC 1.19.4) + ------------------------------------------------------ Version 1.12.0 ------------------------------------------------------ @@ -12,6 +21,12 @@ Version 1.11.0 ------------------------------------------------------ Updated to MC 1.19.4 +------------------------------------------------------ +Version 1.10.1 +------------------------------------------------------ +**Fixes** +- Fixed managed sampler uniforms losing data upon resource reloading + ------------------------------------------------------ Version 1.10.0 ------------------------------------------------------ diff --git a/gradle.properties b/gradle.properties index 78ff5fe..37798cd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ loader_version=0.14.17 fabric_version=0.76.0+1.19.4 # Mod Properties -mod_version = 1.12.0 +mod_version = 1.12.1 owners = Ladysnake maven_group = io.github.ladysnake archives_base_name = satin diff --git a/src/main/java/ladysnake/satin/impl/ManagedSamplerUniformBase.java b/src/main/java/ladysnake/satin/impl/ManagedSamplerUniformBase.java index 6587302..2d03bf0 100644 --- a/src/main/java/ladysnake/satin/impl/ManagedSamplerUniformBase.java +++ b/src/main/java/ladysnake/satin/impl/ManagedSamplerUniformBase.java @@ -60,6 +60,7 @@ public boolean findUniformTargets(List shaders) { } this.targets = targets.toArray(new SamplerAccess[0]); this.locations = rawTargets.toArray(new int[0]); + this.syncCurrentValues(); return this.targets.length > 0; } @@ -76,11 +77,22 @@ private boolean findUniformTarget(SamplerAccess access) { if (access.satin$hasSampler(this.name)) { this.targets = new SamplerAccess[] {access}; this.locations = new int[] {getSamplerLoc(access)}; + this.syncCurrentValues(); return true; } return false; } + private void syncCurrentValues() { + Object value = this.cachedValue; + if (value != null) { // after the first upload + this.cachedValue = null; + this.set(value); + } + } + + protected abstract void set(Object value); + @Override public void setDirect(int activeTexture) { int length = this.locations.length; diff --git a/src/main/java/ladysnake/satin/impl/ManagedSamplerUniformV1.java b/src/main/java/ladysnake/satin/impl/ManagedSamplerUniformV1.java index d4cf522..40ca679 100644 --- a/src/main/java/ladysnake/satin/impl/ManagedSamplerUniformV1.java +++ b/src/main/java/ladysnake/satin/impl/ManagedSamplerUniformV1.java @@ -41,7 +41,8 @@ public void set(int textureName) { this.set((Object)textureName); } - private void set(Object value) { + @Override + protected void set(Object value) { SamplerAccess[] targets = this.targets; if (targets.length > 0 && this.cachedValue != value) { for (SamplerAccess target : targets) { diff --git a/src/main/java/ladysnake/satin/impl/ManagedSamplerUniformV2.java b/src/main/java/ladysnake/satin/impl/ManagedSamplerUniformV2.java index d86312a..51da7da 100644 --- a/src/main/java/ladysnake/satin/impl/ManagedSamplerUniformV2.java +++ b/src/main/java/ladysnake/satin/impl/ManagedSamplerUniformV2.java @@ -44,6 +44,11 @@ public void set(int textureName) { set(() -> textureName); } + @Override + protected void set(Object value) { + this.set((IntSupplier) value); + } + @Override public void set(IntSupplier value) { SamplerAccess[] targets = this.targets;