From 90bfbb47449792094adc11be2d9ebaf978a97305 Mon Sep 17 00:00:00 2001 From: rrtt217 Date: Tue, 17 Feb 2026 11:47:28 +0800 Subject: [PATCH 1/4] RGBA16UNORM failure --- .../java/xyz/rrtt217/config/HDRModConfig.java | 2 + .../xyz/rrtt217/core/PngjHDRScreenshot.java | 40 ++++++++++++------- .../rrtt217/mixin/MixinGlCommandEncoder.java | 16 +++++--- .../java/xyz/rrtt217/mixin/MixinGlDevice.java | 19 ++++----- .../xyz/rrtt217/mixin/MixinRenderTarget.java | 4 ++ .../java/xyz/rrtt217/mixin/MixinWindow.java | 4 +- .../xyz/rrtt217/util/HDRModInjectHooks.java | 10 +++++ 7 files changed, 64 insertions(+), 31 deletions(-) diff --git a/common/src/main/java/xyz/rrtt217/config/HDRModConfig.java b/common/src/main/java/xyz/rrtt217/config/HDRModConfig.java index 666b4bf..5e1f31b 100644 --- a/common/src/main/java/xyz/rrtt217/config/HDRModConfig.java +++ b/common/src/main/java/xyz/rrtt217/config/HDRModConfig.java @@ -25,6 +25,8 @@ public class HDRModConfig implements ConfigData { public boolean onlyUpgradeNecessaryTexture = false; @ConfigEntry.Gui.Tooltip public boolean writeBeforeBlitToMainTarget = false; + @ConfigEntry.Gui.Tooltip + public boolean useRGBA16UNORMOnLinux = false; public boolean autoSetPrimaries = true; public Primaries customPrimaries = Primaries.SRGB; diff --git a/common/src/main/java/xyz/rrtt217/core/PngjHDRScreenshot.java b/common/src/main/java/xyz/rrtt217/core/PngjHDRScreenshot.java index 86d7166..b5ed7e9 100644 --- a/common/src/main/java/xyz/rrtt217/core/PngjHDRScreenshot.java +++ b/common/src/main/java/xyz/rrtt217/core/PngjHDRScreenshot.java @@ -93,22 +93,32 @@ public static void grab(File baseDirectory, @Nullable String string, GpuTexture for (int x = 0; x < width; x++) { // Interpret data. int basePos = ((y * width + x) * 4) * 2; - for (int c = 0; c < 4; c++) { - bits = mappedView.data().getShort(basePos + c * 2); - datas[c] = Float.float16ToFloat(bits); + // RGBA16 UNORM. + if(config.useRGBA16UNORMOnLinux) { + for (int c = 0; c < png.imgInfo.channels; c++) { + bits = mappedView.data().getShort(basePos + c * 2); + scanline[x * png.imgInfo.channels + c] = bits; + } } - // Do transform. - if (doPrimariesTransform) { - System.arraycopy(datas, 0, rgb, 0, 3); - System.arraycopy(ColorTransforms.linearColorspaceTransform(rgb, ColorTransforms.linear709to2020Matrix), 0, datas, 0, 3); - } - if (doTransferTransform) { - System.arraycopy(datas, 0, rgb, 0, 3); - System.arraycopy(ColorTransforms.scRGBtoPQ(rgb, config.customGamePaperWhiteBrightness < 0 ? GLFWColorManagement.glfwGetWindowSdrWhiteLevel(Minecraft.getInstance().getWindow().handle()) : config.customGamePaperWhiteBrightness), 0, datas, 0, 3); - } - // Write to line. - for (int c = 0; c < png.imgInfo.channels; c++) { - scanline[x * png.imgInfo.channels + c] = (int) (datas[c] * 65535); + else{ + // RGBA16F. + for (int c = 0; c < 4; c++) { + bits = mappedView.data().getShort(basePos + c * 2); + datas[c] = Float.float16ToFloat(bits); + } + // Do transform. + if (doPrimariesTransform) { + System.arraycopy(datas, 0, rgb, 0, 3); + System.arraycopy(ColorTransforms.linearColorspaceTransform(rgb, ColorTransforms.linear709to2020Matrix), 0, datas, 0, 3); + } + if (doTransferTransform) { + System.arraycopy(datas, 0, rgb, 0, 3); + System.arraycopy(ColorTransforms.scRGBtoPQ(rgb, config.customGamePaperWhiteBrightness < 0 ? GLFWColorManagement.glfwGetWindowSdrWhiteLevel(Minecraft.getInstance().getWindow().handle()) : config.customGamePaperWhiteBrightness), 0, datas, 0, 3); + } + // Write to line. + for (int c = 0; c < png.imgInfo.channels; c++) { + scanline[x * png.imgInfo.channels + c] = (int) (datas[c] * 65535); + } } } // Write to file. diff --git a/common/src/main/java/xyz/rrtt217/mixin/MixinGlCommandEncoder.java b/common/src/main/java/xyz/rrtt217/mixin/MixinGlCommandEncoder.java index c342f4c..98c3981 100644 --- a/common/src/main/java/xyz/rrtt217/mixin/MixinGlCommandEncoder.java +++ b/common/src/main/java/xyz/rrtt217/mixin/MixinGlCommandEncoder.java @@ -1,17 +1,23 @@ package xyz.rrtt217.mixin; import com.mojang.blaze3d.opengl.GlCommandEncoder; +import me.shedaniel.autoconfig.AutoConfig; import org.lwjgl.opengl.GL30; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArgs; -import org.spongepowered.asm.mixin.injection.invoke.arg.Args; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import xyz.rrtt217.config.HDRModConfig; import xyz.rrtt217.util.HDRModInjectHooks; @Mixin(GlCommandEncoder.class) public class MixinGlCommandEncoder { - @ModifyArgs(method = "copyTextureToBuffer(Lcom/mojang/blaze3d/textures/GpuTexture;Lcom/mojang/blaze3d/buffers/GpuBuffer;JLjava/lang/Runnable;IIIII)V", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/opengl/GlStateManager;_readPixels(IIIIIIJ)V")) - private void modifyReadPixelFormat(Args args){ - if(HDRModInjectHooks.isInjectEnabled()) args.set(5, GL30.GL_HALF_FLOAT); + @ModifyArg(method = "copyTextureToBuffer(Lcom/mojang/blaze3d/textures/GpuTexture;Lcom/mojang/blaze3d/buffers/GpuBuffer;JLjava/lang/Runnable;IIIII)V", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/opengl/GlStateManager;_readPixels(IIIIIIJ)V"), index = 5) + private int modifyReadPixelFormat(int i){ + HDRModConfig config = AutoConfig.getConfigHolder(HDRModConfig.class).getConfig(); + if(HDRModInjectHooks.isInjectEnabled()){ + if(config.useRGBA16UNORMOnLinux) return GL30.GL_UNSIGNED_SHORT; + return GL30.GL_HALF_FLOAT; + } + return i; } } diff --git a/common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java b/common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java index 883a9dd..ad16c36 100644 --- a/common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java +++ b/common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java @@ -6,23 +6,24 @@ import me.shedaniel.autoconfig.AutoConfig; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; import org.lwjgl.opengl.GL30; -import xyz.rrtt217.HDRMod; +import org.spongepowered.asm.mixin.injection.ModifyArgs; +import org.spongepowered.asm.mixin.injection.invoke.arg.Args; import xyz.rrtt217.config.HDRModConfig; import xyz.rrtt217.util.HDRModInjectHooks; @Mixin(GlDevice.class) public class MixinGlDevice { - //FIXME: The mixin upgrades all RGBA8 color texture created by createTexture, which may cause performance issues. - //TODO: Only upgrade RGBA8 color texture belonging to a RenderTarget, or the main RenderTarget. - @ModifyArg(method = "createTexture(Ljava/lang/String;ILcom/mojang/blaze3d/textures/TextureFormat;IIII)Lcom/mojang/blaze3d/textures/GpuTexture;", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/opengl/GlStateManager;_texImage2D(IIIIIIIILjava/nio/ByteBuffer;)V", ordinal = 1),index = 2 ) - private int hdr_mod$upgradeColorBufferFormat$0(int i) + @ModifyArgs(method = "createTexture(Ljava/lang/String;ILcom/mojang/blaze3d/textures/TextureFormat;IIII)Lcom/mojang/blaze3d/textures/GpuTexture;", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/opengl/GlStateManager;_texImage2D(IIIIIIIILjava/nio/ByteBuffer;)V", ordinal = 1)) + private void hdr_mod$upgradeColorBufferFormat$0(Args args) { HDRModConfig config = AutoConfig.getConfigHolder(HDRModConfig.class).getConfig(); - if(config.enableHDR && i == GlConst.toGlInternalId(TextureFormat.RGBA8) && (!config.onlyUpgradeNecessaryTexture || HDRModInjectHooks.isInjectEnabled())) { - return GL30.GL_RGBA16F; + if(config.enableHDR && args.get(2).equals(GlConst.toGlInternalId(TextureFormat.RGBA8)) && (!config.onlyUpgradeNecessaryTexture || HDRModInjectHooks.isInjectEnabled())) { + if(HDRModInjectHooks.isInject2Enabled() && config.useRGBA16UNORMOnLinux) { + args.set(2,GL30.GL_RGBA16UI); + args.set(7,GL30.GL_UNSIGNED_SHORT); + } + else args.set(2,GL30.GL_RGBA16F); } - return i; } } diff --git a/common/src/main/java/xyz/rrtt217/mixin/MixinRenderTarget.java b/common/src/main/java/xyz/rrtt217/mixin/MixinRenderTarget.java index 3cd8a95..052de6d 100644 --- a/common/src/main/java/xyz/rrtt217/mixin/MixinRenderTarget.java +++ b/common/src/main/java/xyz/rrtt217/mixin/MixinRenderTarget.java @@ -69,7 +69,9 @@ public class MixinRenderTarget { // If texture / textureView have not been created yet, create them. if (BeforeBlitRenderer.beforeBlitTexture == null) { HDRModInjectHooks.enableInject(); + HDRModInjectHooks.enableInject2(); BeforeBlitRenderer.beforeBlitTexture = RenderSystem.getDevice().createTexture(() -> "Before Blit Ping-pong Texture", 15, TextureFormat.RGBA8, this.width, this.height, 1, 1); + HDRModInjectHooks.disableInject2(); HDRModInjectHooks.disableInject(); } @@ -82,8 +84,10 @@ public class MixinRenderTarget { BeforeBlitRenderer.beforeBlitTextureView.close(); BeforeBlitRenderer.beforeBlitTexture.close(); HDRModInjectHooks.enableInject(); + HDRModInjectHooks.enableInject2(); BeforeBlitRenderer.beforeBlitTexture = RenderSystem.getDevice().createTexture(() -> "Before Blit Ping-pong Texture", 15, TextureFormat.RGBA8, this.width, this.height, 1, 1); BeforeBlitRenderer.beforeBlitTextureView = RenderSystem.getDevice().createTextureView(BeforeBlitRenderer.beforeBlitTexture); + HDRModInjectHooks.disableInject2(); HDRModInjectHooks.disableInject(); } diff --git a/common/src/main/java/xyz/rrtt217/mixin/MixinWindow.java b/common/src/main/java/xyz/rrtt217/mixin/MixinWindow.java index 022231b..c18ba68 100644 --- a/common/src/main/java/xyz/rrtt217/mixin/MixinWindow.java +++ b/common/src/main/java/xyz/rrtt217/mixin/MixinWindow.java @@ -68,10 +68,10 @@ public abstract class MixinWindow { GLFW.glfwWindowHint(GLFW.GLFW_GREEN_BITS, 16); GLFW.glfwWindowHint(GLFW.GLFW_BLUE_BITS, 16); // For float buffer. Note: Because Intel on Windows do not support float buffer (WGL_TYPE_RGBA_FLOAT_ARB), Intel users can't use this mod natively. - if(!applyWorkaround) { + if(!applyWorkaround && !config.useRGBA16UNORMOnLinux) { GLFW.glfwWindowHint(0x00021011,GLFW.GLFW_TRUE); } - else { + else if(applyWorkaround) { HDRMod.LOGGER.warn("A workaround has been applied for your platform and hardware. HDR Mod may or may not work."); } } diff --git a/common/src/main/java/xyz/rrtt217/util/HDRModInjectHooks.java b/common/src/main/java/xyz/rrtt217/util/HDRModInjectHooks.java index 660013c..2d7bbfa 100644 --- a/common/src/main/java/xyz/rrtt217/util/HDRModInjectHooks.java +++ b/common/src/main/java/xyz/rrtt217/util/HDRModInjectHooks.java @@ -2,16 +2,26 @@ public class HDRModInjectHooks { private static final ThreadLocal shouldInject = ThreadLocal.withInitial(() -> false); + private static final ThreadLocal shouldInject2 = ThreadLocal.withInitial(() -> false); public static void enableInject() { shouldInject.set(true); } + public static void enableInject2() { + shouldInject2.set(true); + } public static void disableInject() { shouldInject.remove(); } + public static void disableInject2() { + shouldInject2.remove(); + } public static boolean isInjectEnabled() { return shouldInject.get(); } + public static boolean isInject2Enabled() { + return shouldInject2.get(); + } } From 6aa8fe393fde8ae2259df8e968a9303281c30136 Mon Sep 17 00:00:00 2001 From: rrtt217 Date: Tue, 17 Feb 2026 17:55:21 +0800 Subject: [PATCH 2/4] still do not work --- common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java | 6 +++++- .../src/main/java/xyz/rrtt217/mixin/MixinRenderTarget.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java b/common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java index ad16c36..fd65bb5 100644 --- a/common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java +++ b/common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java @@ -21,9 +21,13 @@ public class MixinGlDevice { if(config.enableHDR && args.get(2).equals(GlConst.toGlInternalId(TextureFormat.RGBA8)) && (!config.onlyUpgradeNecessaryTexture || HDRModInjectHooks.isInjectEnabled())) { if(HDRModInjectHooks.isInject2Enabled() && config.useRGBA16UNORMOnLinux) { args.set(2,GL30.GL_RGBA16UI); + args.set(6,GL30.GL_RGBA_INTEGER); args.set(7,GL30.GL_UNSIGNED_SHORT); } - else args.set(2,GL30.GL_RGBA16F); + else { + args.set(2, GL30.GL_RGBA16F); + args.set(7, GL30.GL_HALF_FLOAT); + } } } } diff --git a/common/src/main/java/xyz/rrtt217/mixin/MixinRenderTarget.java b/common/src/main/java/xyz/rrtt217/mixin/MixinRenderTarget.java index 052de6d..9efc552 100644 --- a/common/src/main/java/xyz/rrtt217/mixin/MixinRenderTarget.java +++ b/common/src/main/java/xyz/rrtt217/mixin/MixinRenderTarget.java @@ -128,7 +128,7 @@ public class MixinRenderTarget { } } } - @ModifyArg(method = "blitToScreen", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/CommandEncoder;presentTexture(Lcom/mojang/blaze3d/textures/GpuTextureView;)V"), index = 0) +@ModifyArg(method = "blitToScreen", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/CommandEncoder;presentTexture(Lcom/mojang/blaze3d/textures/GpuTextureView;)V"), index = 0) private GpuTextureView hdr_mod$modifyTextureToBePresented(GpuTextureView gpuTextureView){ HDRModConfig config = AutoConfig.getConfigHolder(HDRModConfig.class).getConfig(); if(config.writeBeforeBlitToMainTarget || config.forceDisableBeforeBlitPipeline) return gpuTextureView; From 5982da75c97ea48258f14e689cc3381979a549f5 Mon Sep 17 00:00:00 2001 From: rrtt217 Date: Tue, 17 Feb 2026 18:11:20 +0800 Subject: [PATCH 3/4] feat: config to use RGBA16 instead of RGBA16f --- common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java b/common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java index fd65bb5..386c5c3 100644 --- a/common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java +++ b/common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java @@ -20,8 +20,7 @@ public class MixinGlDevice { HDRModConfig config = AutoConfig.getConfigHolder(HDRModConfig.class).getConfig(); if(config.enableHDR && args.get(2).equals(GlConst.toGlInternalId(TextureFormat.RGBA8)) && (!config.onlyUpgradeNecessaryTexture || HDRModInjectHooks.isInjectEnabled())) { if(HDRModInjectHooks.isInject2Enabled() && config.useRGBA16UNORMOnLinux) { - args.set(2,GL30.GL_RGBA16UI); - args.set(6,GL30.GL_RGBA_INTEGER); + args.set(2,GL30.GL_RGBA16); args.set(7,GL30.GL_UNSIGNED_SHORT); } else { From 48c998fe2b5a6af9489d43b4c5e1e1f4f4ce0b1a Mon Sep 17 00:00:00 2001 From: rrtt217 Date: Tue, 17 Feb 2026 19:17:11 +0800 Subject: [PATCH 4/4] feat: add config category --- .../java/xyz/rrtt217/config/HDRModConfig.java | 18 +++++++++++++++-- .../xyz/rrtt217/core/PngjHDRScreenshot.java | 3 +-- .../rrtt217/mixin/MixinGlCommandEncoder.java | 2 +- .../java/xyz/rrtt217/mixin/MixinGlDevice.java | 2 +- .../java/xyz/rrtt217/mixin/MixinWindow.java | 2 +- .../resources/assets/hdr_mod/lang/en_us.json | 20 +++++++++++++------ .../resources/assets/hdr_mod/lang/zh_cn.json | 20 +++++++++++++------ 7 files changed, 48 insertions(+), 19 deletions(-) diff --git a/common/src/main/java/xyz/rrtt217/config/HDRModConfig.java b/common/src/main/java/xyz/rrtt217/config/HDRModConfig.java index 5e1f31b..ac3e78e 100644 --- a/common/src/main/java/xyz/rrtt217/config/HDRModConfig.java +++ b/common/src/main/java/xyz/rrtt217/config/HDRModConfig.java @@ -8,31 +8,45 @@ @Config(name = "hdr_mod") public class HDRModConfig implements ConfigData { @ConfigEntry.Gui.Tooltip + @ConfigEntry.Category("general") public boolean enableHDR = true; @ConfigEntry.Gui.Tooltip + @ConfigEntry.Category("general") public float uiBrightness = -1.0f; @ConfigEntry.Gui.Tooltip + @ConfigEntry.Category("general") public float customGamePaperWhiteBrightness = -1.0f; @ConfigEntry.Gui.Tooltip + @ConfigEntry.Category("general") public float customGamePeakBrightness = 1000.0f; @ConfigEntry.Gui.Tooltip + @ConfigEntry.Category("general") public float customGameMinimumBrightness = 0.0f; @ConfigEntry.Gui.Tooltip + @ConfigEntry.Category("general") public float customEotfEmulate = System.getProperty("os.name").startsWith("Windows") ? -1.0f : 0.0f; @ConfigEntry.Gui.Tooltip + @ConfigEntry.Category("advanced") public boolean onlyUpgradeNecessaryTexture = false; @ConfigEntry.Gui.Tooltip + @ConfigEntry.Category("advanced") public boolean writeBeforeBlitToMainTarget = false; @ConfigEntry.Gui.Tooltip - public boolean useRGBA16UNORMOnLinux = false; + @ConfigEntry.Category("advanced") + public boolean useRGBA16UNORM = System.getProperty("os.name").toLowerCase().contains("linux"); + @ConfigEntry.Category("debug") public boolean autoSetPrimaries = true; + @ConfigEntry.Category("debug") public Primaries customPrimaries = Primaries.SRGB; + @ConfigEntry.Category("debug") public boolean autoSetTransferFunction = true; + @ConfigEntry.Category("debug") public TransferFunction customTransferFunction = TransferFunction.SRGB; - + @ConfigEntry.Category("debug") public boolean forceDisableGlfwWorkound = false; + @ConfigEntry.Category("debug") public boolean forceDisableBeforeBlitPipeline = false; } diff --git a/common/src/main/java/xyz/rrtt217/core/PngjHDRScreenshot.java b/common/src/main/java/xyz/rrtt217/core/PngjHDRScreenshot.java index b5ed7e9..80ea30c 100644 --- a/common/src/main/java/xyz/rrtt217/core/PngjHDRScreenshot.java +++ b/common/src/main/java/xyz/rrtt217/core/PngjHDRScreenshot.java @@ -23,7 +23,6 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.InputStream; -import java.util.Arrays; import java.util.function.Consumer; public class PngjHDRScreenshot { @@ -94,7 +93,7 @@ public static void grab(File baseDirectory, @Nullable String string, GpuTexture // Interpret data. int basePos = ((y * width + x) * 4) * 2; // RGBA16 UNORM. - if(config.useRGBA16UNORMOnLinux) { + if(config.useRGBA16UNORM) { for (int c = 0; c < png.imgInfo.channels; c++) { bits = mappedView.data().getShort(basePos + c * 2); scanline[x * png.imgInfo.channels + c] = bits; diff --git a/common/src/main/java/xyz/rrtt217/mixin/MixinGlCommandEncoder.java b/common/src/main/java/xyz/rrtt217/mixin/MixinGlCommandEncoder.java index 98c3981..d5c0c42 100644 --- a/common/src/main/java/xyz/rrtt217/mixin/MixinGlCommandEncoder.java +++ b/common/src/main/java/xyz/rrtt217/mixin/MixinGlCommandEncoder.java @@ -15,7 +15,7 @@ public class MixinGlCommandEncoder { private int modifyReadPixelFormat(int i){ HDRModConfig config = AutoConfig.getConfigHolder(HDRModConfig.class).getConfig(); if(HDRModInjectHooks.isInjectEnabled()){ - if(config.useRGBA16UNORMOnLinux) return GL30.GL_UNSIGNED_SHORT; + if(config.useRGBA16UNORM) return GL30.GL_UNSIGNED_SHORT; return GL30.GL_HALF_FLOAT; } return i; diff --git a/common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java b/common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java index 386c5c3..296975a 100644 --- a/common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java +++ b/common/src/main/java/xyz/rrtt217/mixin/MixinGlDevice.java @@ -19,7 +19,7 @@ public class MixinGlDevice { { HDRModConfig config = AutoConfig.getConfigHolder(HDRModConfig.class).getConfig(); if(config.enableHDR && args.get(2).equals(GlConst.toGlInternalId(TextureFormat.RGBA8)) && (!config.onlyUpgradeNecessaryTexture || HDRModInjectHooks.isInjectEnabled())) { - if(HDRModInjectHooks.isInject2Enabled() && config.useRGBA16UNORMOnLinux) { + if(HDRModInjectHooks.isInject2Enabled() && config.useRGBA16UNORM) { args.set(2,GL30.GL_RGBA16); args.set(7,GL30.GL_UNSIGNED_SHORT); } diff --git a/common/src/main/java/xyz/rrtt217/mixin/MixinWindow.java b/common/src/main/java/xyz/rrtt217/mixin/MixinWindow.java index c18ba68..cc12079 100644 --- a/common/src/main/java/xyz/rrtt217/mixin/MixinWindow.java +++ b/common/src/main/java/xyz/rrtt217/mixin/MixinWindow.java @@ -68,7 +68,7 @@ public abstract class MixinWindow { GLFW.glfwWindowHint(GLFW.GLFW_GREEN_BITS, 16); GLFW.glfwWindowHint(GLFW.GLFW_BLUE_BITS, 16); // For float buffer. Note: Because Intel on Windows do not support float buffer (WGL_TYPE_RGBA_FLOAT_ARB), Intel users can't use this mod natively. - if(!applyWorkaround && !config.useRGBA16UNORMOnLinux) { + if(!applyWorkaround && !config.useRGBA16UNORM) { GLFW.glfwWindowHint(0x00021011,GLFW.GLFW_TRUE); } else if(applyWorkaround) { diff --git a/common/src/main/resources/assets/hdr_mod/lang/en_us.json b/common/src/main/resources/assets/hdr_mod/lang/en_us.json index 5a5a668..bcda764 100644 --- a/common/src/main/resources/assets/hdr_mod/lang/en_us.json +++ b/common/src/main/resources/assets/hdr_mod/lang/en_us.json @@ -12,18 +12,26 @@ "text.autoconfig.hdr_mod.option.customGamePeakBrightness.@Tooltip": "In nits, the maximum the display can output. Set it negative to use display reported value.", "text.autoconfig.hdr_mod.option.customEotfEmulate.@Tooltip": "Correct raised shadows to match SDR. Use if OS or display doesn't do so already. Set it negative to use display reported SDR paper white.", - "text.autoconfig.hdr_mod.option.onlyUpgradeNecessaryTexture": "(Advanced) Only Upgrade Necessary Texture", + "text.autoconfig.hdr_mod.option.onlyUpgradeNecessaryTexture": "Only Upgrade Necessary Texture", "text.autoconfig.hdr_mod.option.onlyUpgradeNecessaryTexture.@Tooltip": "Only upgrade necessary texture from RGBA8 to RGBA16F. When enabled, only color texture of a render target or the BEFORE_BLIT ping-pong texture will be upgraded. When disabled, all color textures created by vanilla will be upgraded.", - "text.autoconfig.hdr_mod.option.writeBeforeBlitToMainTarget": "(Advanced) Write BEFORE_BLIT Render Target To Main Render Target", + "text.autoconfig.hdr_mod.option.writeBeforeBlitToMainTarget": "Write BEFORE_BLIT Render Target To Main Render Target", "text.autoconfig.hdr_mod.option.writeBeforeBlitToMainTarget.@Tooltip": "If on, ingame screenshot and ReplayMod/Flashback will be severely broken.\n If off, some mods that rewrite blitToScreen may break the game. Keep 'off' if unsure.", + "text.autoconfig.hdr_mod.option.useRGBA16UNORM": "Use RGBA16 UNORM Instead Of RGBA16F For BEFORE_BLIT Render Target", + "text.autoconfig.hdr_mod.option.useRGBA16UNORM.@Tooltip": "Improve precision when using BT.2100 PQ transfer function, but completely breaks scRGB linear. Keep default if unsure.", + "text.autoconfig.hdr_mod.option.autoSetPrimaries": "Auto Set Primaries", - "text.autoconfig.hdr_mod.option.customPrimaries": "(Debug) Custom Primaries ", + "text.autoconfig.hdr_mod.option.customPrimaries": "Custom Primaries ", "text.autoconfig.hdr_mod.option.autoSetTransferFunction": "Auto Set Transfer Function", - "text.autoconfig.hdr_mod.option.customTransferFunction": "(Debug) Custom Transfer Function ", - "text.autoconfig.hdr_mod.option.forceDisableGlfwWorkound": "(Debug) Force Disable GLFW Workaround", - "text.autoconfig.hdr_mod.option.forceDisableBeforeBlitPipeline": "(Debug) Force Disable the BEFORE_BLIT Pipeline", + "text.autoconfig.hdr_mod.option.customTransferFunction": "Custom Transfer Function ", + "text.autoconfig.hdr_mod.option.forceDisableGlfwWorkound": "Force Disable GLFW Workaround", + "text.autoconfig.hdr_mod.option.forceDisableBeforeBlitPipeline": "Force Disable the BEFORE_BLIT Pipeline", "text.autoconfig.hdr_mod.title": "HDR Mod Config", + + "text.autoconfig.hdr_mod.category.general": "General", + "text.autoconfig.hdr_mod.category.advanced": "Advanced", + "text.autoconfig.hdr_mod.category.debug": "Debug", + "key.hdr_mod.open_config_menu": "Open Config Menu", "key.hdr_mod.take_hdr_screenshot": "Take HDR Screenshot", "key.category.hdr_mod.main": "HDR Mod" diff --git a/common/src/main/resources/assets/hdr_mod/lang/zh_cn.json b/common/src/main/resources/assets/hdr_mod/lang/zh_cn.json index 7ec092d..3ac2c9e 100644 --- a/common/src/main/resources/assets/hdr_mod/lang/zh_cn.json +++ b/common/src/main/resources/assets/hdr_mod/lang/zh_cn.json @@ -12,18 +12,26 @@ "text.autoconfig.hdr_mod.option.customGamePeakBrightness.@Tooltip": "以尼特为单位,设置显示器可输出的最大亮度。设置为负数以使用显示器报告的值。", "text.autoconfig.hdr_mod.option.customEotfEmulate.@Tooltip": "校正提升的黑色区域以匹配 SDR。如果操作系统或显示器尚未执行此操作,请使用此项。设置为负数以使用显示器报告的 SDR 参考白亮度。", - "text.autoconfig.hdr_mod.option.onlyUpgradeNecessaryTexture": "(高级) 仅升级必要纹理", + "text.autoconfig.hdr_mod.option.onlyUpgradeNecessaryTexture": "仅升级必要纹理", "text.autoconfig.hdr_mod.option.onlyUpgradeNecessaryTexture.@Tooltip": "仅将必要的纹理从 RGBA8 升级到 RGBA16F。启用时,只有渲染目标的颜色纹理和 BEFORE_BLIT Ping-pong纹理会被升级。禁用时,所有由原版创建的彩色纹理都将被升级。", - "text.autoconfig.hdr_mod.option.writeBeforeBlitToMainTarget": "(高级) 将BEFORE_BLIT 渲染目标纹理复制到主渲染目标纹理", + "text.autoconfig.hdr_mod.option.writeBeforeBlitToMainTarget": "将BEFORE_BLIT 渲染目标纹理复制到主渲染目标纹理", "text.autoconfig.hdr_mod.option.writeBeforeBlitToMainTarget.@Tooltip": "如果开启,原版游戏截图和ReplayMod/Flashback模组录像会严重损坏。\n 如果关闭,某些重写blitToScreen的模组可能会破坏游戏. 如果不确定,请保持关闭。", + "text.autoconfig.hdr_mod.option.useRGBA16UNORM": "为BEFORE_BLIT 渲染目标纹理使用归一化定点RGBA16而非浮点RGBA16格式", + "text.autoconfig.hdr_mod.option.useRGBA16UNORM.@Tooltip": "提高使用BT.2100 PQ转换函数时的精度,但会完全破坏scRGB。 如果不确定,请保持默认值。", + "text.autoconfig.hdr_mod.option.autoSetPrimaries": "自动设置基色", - "text.autoconfig.hdr_mod.option.customPrimaries": "(调试) 自定义基色", + "text.autoconfig.hdr_mod.option.customPrimaries": "自定义基色", "text.autoconfig.hdr_mod.option.autoSetTransferFunction": "自动设置传递函数", - "text.autoconfig.hdr_mod.option.customTransferFunction": "(调试) 自定义传递函数", - "text.autoconfig.hdr_mod.option.forceDisableGlfwWorkound": "(调试) 强制禁用 GLFW 兼容性调整", - "text.autoconfig.hdr_mod.option.forceDisableBeforeBlitPipeline": "(调试) 强制禁用 BEFORE_BLIT 管线", + "text.autoconfig.hdr_mod.option.customTransferFunction": "自定义传递函数", + "text.autoconfig.hdr_mod.option.forceDisableGlfwWorkound": "强制禁用 GLFW 兼容性调整", + "text.autoconfig.hdr_mod.option.forceDisableBeforeBlitPipeline": "强制禁用 BEFORE_BLIT 管线", "text.autoconfig.hdr_mod.title": "HDR 模组配置", + + "text.autoconfig.hdr_mod.category.general": "通用", + "text.autoconfig.hdr_mod.category.advanced": "高级", + "text.autoconfig.hdr_mod.category.debug": "调试", + "key.hdr_mod.open_config_menu": "打开配置菜单", "key.hdr_mod.take_hdr_screenshot": "拍摄HDR截图", "key.category.hdr_mod.main": "HDR 模组"