From 332a3867204b7f3f2a43b1e2a14f927e4586e642 Mon Sep 17 00:00:00 2001 From: awruff Date: Wed, 22 Jul 2026 09:34:20 -0400 Subject: [PATCH 1/5] chore: set vcs to 26.2 --- bootstrap/stonecutter.gradle.kts | 2 +- .../v1/internal/I18nPlatformImpl.java | 12 +++---- .../v1/internal/ScreenPlatformImpl.java | 18 +++++------ .../oneconfig/internal/OneConfig.java | 10 +++--- .../internal/OneConfigMixinInit.java | 6 ++-- .../mixin/blaze3d/GlDeviceAccessor.java | 8 ++--- .../compat/odin/Mixin_OdinModuleManager.java | 4 +-- .../mixin/compat/skycubed/Mixin_SkyCubed.java | 4 +-- .../skycubed/Mixin_SkyCubedOverlays.java | 4 +-- .../events/Mixin_FramebufferRenderEvent.java | 16 +++++----- .../mixin/events/Mixin_HudRenderEvent.java | 16 +++++----- .../mixin/events/Mixin_MouseInputEvent.java | 8 ++--- .../events/Mixin_RenderLivingEntityEvent.java | 4 +-- .../skia/Mixin_GuiRendererLegacyTarget.java | 16 +++++----- .../mixin/skia/Mixin_SkiaFramePresent.java | 8 ++--- .../oneconfig/internal/compat/OdinCompat.kt | 4 +-- .../internal/compat/SkyCubedCompat.kt | 4 +-- .../oneconfig/internal/ui/RenderTargetFbo.kt | 12 +++---- .../internal/ui/compose/BlurRenderer.kt | 4 +-- .../oneconfig/internal/ui/compose/SkiaCtx.kt | 32 +++++++++---------- .../ui/compose/opengl/StoredGLState.kt | 8 ++--- .../internal/ui/hud/LegacyHudOffscreen.kt | 24 +++++++------- .../internal/ui/services/GLVulkanService.kt | 2 +- .../ui/services/NativeVulkanService.kt | 4 +-- .../ui/services/VulkanModVulkanService.kt | 4 +-- .../oneconfig/utils/v1/dsl/screens.kt | 8 ++--- minecraft/stonecutter.gradle.kts | 2 +- 27 files changed, 122 insertions(+), 122 deletions(-) diff --git a/bootstrap/stonecutter.gradle.kts b/bootstrap/stonecutter.gradle.kts index c6ec245b8..232111f72 100644 --- a/bootstrap/stonecutter.gradle.kts +++ b/bootstrap/stonecutter.gradle.kts @@ -2,7 +2,7 @@ plugins { id("dev.kikugie.stonecutter") } -stonecutter active "26.1-fabric" +stonecutter active "26.2-fabric" stonecutter tasks { order("publishModrinth") } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/I18nPlatformImpl.java b/minecraft/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/I18nPlatformImpl.java index c4bb75724..fc226c1b4 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/I18nPlatformImpl.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/I18nPlatformImpl.java @@ -29,8 +29,8 @@ import net.minecraft.ChatFormatting; import net.minecraft.client.resources.language.I18n; //? if >= 26.2 { -/*import net.minecraft.locale.Language; -*///?} +import net.minecraft.locale.Language; +//?} import net.minecraft.network.chat.Component; import net.minecraft.network.chat.FormattedText; import net.minecraft.util.FormattedCharSequence; @@ -51,10 +51,10 @@ public String translateString(String key, Object... args) { @Override public boolean hasTranslation(String key) { //? if >= 26.2 { - /*return Language.getInstance().has(key); - *///?} else { - return I18n.exists(key); - //?} + return Language.getInstance().has(key); + //?} else { + /*return I18n.exists(key); + *///?} } @Override diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/ScreenPlatformImpl.java b/minecraft/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/ScreenPlatformImpl.java index e4e948409..43b8fe211 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/ScreenPlatformImpl.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/ScreenPlatformImpl.java @@ -96,21 +96,21 @@ public void display(@Nullable Object screen, int ticks) { return; } //? if >= 26.2 { - /*// 26.2 removed Minecraft#setScreen. Use Gui#setScreen, not setScreenAndShow (which force-calls + // 26.2 removed Minecraft#setScreen. Use Gui#setScreen, not setScreenAndShow (which force-calls // renderFrame and re-enters our renderFrame mixin -> nested frame -> 1-frame black flash). if (ticks < 1) Minecraft.getInstance().gui.setScreen((Screen) screen); else EventDelay.tick(ticks, () -> Minecraft.getInstance().gui.setScreen((Screen) screen)); - *///?} else { - if (ticks < 1) Minecraft.getInstance().setScreen((Screen) screen); + //?} else { + /*if (ticks < 1) Minecraft.getInstance().setScreen((Screen) screen); else EventDelay.tick(ticks, () -> Minecraft.getInstance().setScreen((Screen) screen)); - //?} + *///?} } private void warnUiUnavailable() { String reason = SkiaCtx.INSTANCE.unavailableReason(); if (reason == null) return; //~ if >= 26.2 'gui.getChat' -> 'gui.hud.getChat' - Minecraft.getInstance().gui.getChat() + Minecraft.getInstance().gui.hud.getChat() //~ if >= 26.1 'addMessage' -> 'addClientSystemMessage' .addClientSystemMessage(Component.literal(reason).withStyle(ChatFormatting.RED)); } @@ -119,10 +119,10 @@ private void warnUiUnavailable() { @SuppressWarnings("unchecked" /*, reason = "reduces friction between versions" */) public @Nullable T current() { //? if >= 26.2 { - /*return (T) Minecraft.getInstance().gui.screen(); - *///?} else { - return (T) Minecraft.getInstance().screen; - //?} + return (T) Minecraft.getInstance().gui.screen(); + //?} else { + /*return (T) Minecraft.getInstance().screen; + *///?} } } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/OneConfig.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/OneConfig.java index 7515d49dd..0d5d7b9de 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/OneConfig.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/OneConfig.java @@ -107,10 +107,10 @@ private static void registerCommands() { public static boolean isInChatScreen() { //? if >= 26.2 { - /*return Minecraft.getInstance().gui.screen() instanceof ChatScreen; - *///?} else { - return Minecraft.getInstance().screen instanceof ChatScreen; - //?} + return Minecraft.getInstance().gui.screen() instanceof ChatScreen; + //?} else { + /*return Minecraft.getInstance().screen instanceof ChatScreen; + *///?} } private static void registerKeybinds() { @@ -130,7 +130,7 @@ private static void registerKeybinds() { Platform.screen().display(new OneConfigUIScreen()); } catch (Throwable t) { //~ if >= 26.2 'gui.getChat' -> 'gui.hud.getChat' - Minecraft.getInstance().gui.getChat() + Minecraft.getInstance().gui.hud.getChat() //~ if >= 26.1 'addMessage' -> 'addClientSystemMessage' .addClientSystemMessage(Component.literal("Failed to open OneConfig UI: " + t.getMessage() + ". Please report this!") .withStyle( diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/OneConfigMixinInit.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/OneConfigMixinInit.java index d83b47c91..6412927d7 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/OneConfigMixinInit.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/OneConfigMixinInit.java @@ -81,7 +81,7 @@ public List getMixins() { //mixins.add("compat.DandelionScreenImplMixin"); //? odin_compat - mixins.add("compat.odin.Mixin_OdinModuleManager"); + //mixins.add("compat.odin.Mixin_OdinModuleManager"); //? rconfig_compat mixins.add("compat.rconfig.Mixin_Configurations"); @@ -97,9 +97,9 @@ public List getMixins() { mixins.add("compat.tr7zw.Mixin_AbstractConfigScreen"); //? skycubed_compat { - mixins.add("compat.skycubed.Mixin_SkyCubed"); + /*mixins.add("compat.skycubed.Mixin_SkyCubed"); mixins.add("compat.skycubed.Mixin_SkyCubedOverlays"); - //? } + *///? } //? skyblocker_compat { mixins.add("compat.skyblocker.Mixin_SkyblockerFancyStatusBars"); diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/blaze3d/GlDeviceAccessor.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/blaze3d/GlDeviceAccessor.java index 6493256a3..2de48406a 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/blaze3d/GlDeviceAccessor.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/blaze3d/GlDeviceAccessor.java @@ -5,8 +5,8 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; //? >= 26.2 { -/*import com.mojang.blaze3d.opengl.FrameBufferCache; -*///? } +import com.mojang.blaze3d.opengl.FrameBufferCache; +//? } @Mixin(targets = "com.mojang.blaze3d.opengl.GlDevice") public interface GlDeviceAccessor { @@ -14,8 +14,8 @@ public interface GlDeviceAccessor { DirectStateAccess oneconfig$getDirectStateAccess(); //? >= 26.2 { - /*@Invoker("frameBufferCache") + @Invoker("frameBufferCache") FrameBufferCache oneconfig$getFrameBufferCache(); - *///? } + //? } } //? } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/odin/Mixin_OdinModuleManager.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/odin/Mixin_OdinModuleManager.java index 6f87f4aac..a675d4f44 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/odin/Mixin_OdinModuleManager.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/odin/Mixin_OdinModuleManager.java @@ -1,7 +1,7 @@ package org.polyfrost.oneconfig.internal.mixin.compat.odin; //? odin_compat { -import com.odtheking.odin.features.ModuleManager; +/*import com.odtheking.odin.features.ModuleManager; import org.polyfrost.oneconfig.internal.compat.OdinCompat; import org.polyfrost.oneconfig.internal.ui.hud.CompatOverlayRenderer; import org.spongepowered.asm.mixin.Mixin; @@ -22,4 +22,4 @@ public class Mixin_OdinModuleManager { } } } -//? } +*///? } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/skycubed/Mixin_SkyCubed.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/skycubed/Mixin_SkyCubed.java index af83072ed..cc291b073 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/skycubed/Mixin_SkyCubed.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/skycubed/Mixin_SkyCubed.java @@ -1,7 +1,7 @@ package org.polyfrost.oneconfig.internal.mixin.compat.skycubed; //? skycubed_compat { -import org.polyfrost.oneconfig.internal.compat.SkyCubedCompat; +/*import org.polyfrost.oneconfig.internal.compat.SkyCubedCompat; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.injection.At; @@ -18,4 +18,4 @@ public class Mixin_SkyCubed { SkyCubedCompat.initialize(); } } -//? } +*///? } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/skycubed/Mixin_SkyCubedOverlays.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/skycubed/Mixin_SkyCubedOverlays.java index 77a80d947..58198d620 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/skycubed/Mixin_SkyCubedOverlays.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/skycubed/Mixin_SkyCubedOverlays.java @@ -1,7 +1,7 @@ package org.polyfrost.oneconfig.internal.mixin.compat.skycubed; //? skycubed_compat { -import me.owdding.lib.overlays.Overlays; +/*import me.owdding.lib.overlays.Overlays; import org.polyfrost.oneconfig.internal.ui.hud.CompatOverlayRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; @@ -20,4 +20,4 @@ public class Mixin_SkyCubedOverlays { } } } -//? } +*///? } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_FramebufferRenderEvent.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_FramebufferRenderEvent.java index fdb39f4be..91c123594 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_FramebufferRenderEvent.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_FramebufferRenderEvent.java @@ -14,10 +14,10 @@ public class Mixin_FramebufferRenderEvent { //~ if >= 26.1 'runTick' -> 'renderFrame' @Inject(method = "renderFrame", at = @At(value = "INVOKE", //? if >= 26.2 { - /*target = "Lcom/mojang/blaze3d/systems/GpuSurface;present()V" - *///?} elif 26.1 { - target = "Lcom/mojang/blaze3d/systems/RenderSystem;flipFrame(Lcom/mojang/blaze3d/TracyFrameCapture;)V" - //?} elif >= 1.21.4 { + target = "Lcom/mojang/blaze3d/systems/GpuSurface;present()V" + //?} elif 26.1 { + /*target = "Lcom/mojang/blaze3d/systems/RenderSystem;flipFrame(Lcom/mojang/blaze3d/TracyFrameCapture;)V" + *///?} elif >= 1.21.4 { /*target = "Lcom/mojang/blaze3d/platform/Window;updateDisplay(Lcom/mojang/blaze3d/TracyFrameCapture;)V" *///?} else //target = "Lcom/mojang/blaze3d/platform/Window;updateDisplay()V" @@ -29,10 +29,10 @@ private void preFramebufferRenderCallback(CallbackInfo ci) { //~ if >= 26.1 'runTick' -> 'renderFrame' @Inject(method = "renderFrame", at = @At(value = "INVOKE", //? if >= 26.2 { - /*target = "Lcom/mojang/blaze3d/systems/GpuSurface;present()V", - *///?} elif 26.1 { - target = "Lcom/mojang/blaze3d/systems/RenderSystem;flipFrame(Lcom/mojang/blaze3d/TracyFrameCapture;)V", - //?} elif >= 1.21.4 { + target = "Lcom/mojang/blaze3d/systems/GpuSurface;present()V", + //?} elif 26.1 { + /*target = "Lcom/mojang/blaze3d/systems/RenderSystem;flipFrame(Lcom/mojang/blaze3d/TracyFrameCapture;)V", + *///?} elif >= 1.21.4 { /*target = "Lcom/mojang/blaze3d/platform/Window;updateDisplay(Lcom/mojang/blaze3d/TracyFrameCapture;)V", *///?} else //target = "Lcom/mojang/blaze3d/platform/Window;updateDisplay()V", diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_HudRenderEvent.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_HudRenderEvent.java index 021c11090..0da7c4a85 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_HudRenderEvent.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_HudRenderEvent.java @@ -3,10 +3,10 @@ //~ gui_graphics import net.minecraft.client.DeltaTracker; //? >= 26.2 { -/*import net.minecraft.client.gui.Hud; -*///? } else { -import net.minecraft.client.gui.Gui; -//? } +import net.minecraft.client.gui.Hud; +//? } else { +/*import net.minecraft.client.gui.Gui; +*///? } import net.minecraft.client.gui.GuiGraphicsExtractor; import org.polyfrost.oneconfig.internal.OneConfig; import org.polyfrost.oneconfig.internal.ui.compose.SkiaCtx; @@ -16,10 +16,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //? if >= 26.2 { - /*@Mixin(Hud.class) -*///? } else { -@Mixin(Gui.class) -//? } + @Mixin(Hud.class) +//? } else { +/*@Mixin(Gui.class) +*///? } public class Mixin_HudRenderEvent { //~ if >= 26.1 'render' -> 'extractRenderState' diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_MouseInputEvent.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_MouseInputEvent.java index fef481df5..e19b881c8 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_MouseInputEvent.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_MouseInputEvent.java @@ -22,10 +22,10 @@ private void mouseCallback(long window, MouseButtonInfo buttonInfo, int action, @Inject(method = "onMove", at = @At("HEAD")) private void mouseMoveCallback(long handle, double x, double y, CallbackInfo ci) { //? if >= 26.2 { - /*if (Minecraft.getInstance().gui.screen() != null) { - *///?} else { - if (Minecraft.getInstance().screen != null) { - //?} + if (Minecraft.getInstance().gui.screen() != null) { + //?} else { + /*if (Minecraft.getInstance().screen != null) { + *///?} MouseInputEvent.Moved.post((float) x, (float) y); } } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_RenderLivingEntityEvent.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_RenderLivingEntityEvent.java index 49fd6ac93..c5fc0073e 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_RenderLivingEntityEvent.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_RenderLivingEntityEvent.java @@ -3,8 +3,8 @@ import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; //? < 26.2 { -import net.minecraft.client.renderer.MultiBufferSource; -//? } +/*import net.minecraft.client.renderer.MultiBufferSource; +*///? } import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.world.entity.LivingEntity; import org.polyfrost.oneconfig.api.event.v1.EventManager; diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/skia/Mixin_GuiRendererLegacyTarget.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/skia/Mixin_GuiRendererLegacyTarget.java index ea279ff6f..3a18af8fb 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/skia/Mixin_GuiRendererLegacyTarget.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/skia/Mixin_GuiRendererLegacyTarget.java @@ -4,10 +4,10 @@ import com.mojang.blaze3d.pipeline.RenderTarget; import net.minecraft.client.gui.render.GuiRenderer; //? if >= 26.2 { -/*import net.minecraft.client.renderer.GameRenderer; -*///? } else { -import net.minecraft.client.Minecraft; -//? } +import net.minecraft.client.renderer.GameRenderer; +//? } else { +/*import net.minecraft.client.Minecraft; +*///? } import org.polyfrost.oneconfig.internal.ui.hud.LegacyHudOffscreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -16,7 +16,7 @@ @Mixin(GuiRenderer.class) public class Mixin_GuiRendererLegacyTarget { //? if >= 26.2 { - /*@Redirect( + @Redirect( method = "draw", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;mainRenderTarget()Lcom/mojang/blaze3d/pipeline/RenderTarget;") ) @@ -24,8 +24,8 @@ public class Mixin_GuiRendererLegacyTarget { RenderTarget override = LegacyHudOffscreen.INSTANCE.redirectTarget; return override != null ? override : instance.mainRenderTarget(); } - *///? } else { - @Redirect( + //? } else { + /*@Redirect( method = "draw", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getMainRenderTarget()Lcom/mojang/blaze3d/pipeline/RenderTarget;") ) @@ -33,6 +33,6 @@ public class Mixin_GuiRendererLegacyTarget { RenderTarget override = LegacyHudOffscreen.INSTANCE.redirectTarget; return override != null ? override : instance.getMainRenderTarget(); } - //? } + *///? } } //? } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/skia/Mixin_SkiaFramePresent.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/skia/Mixin_SkiaFramePresent.java index 397b5f04f..16bf59745 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/skia/Mixin_SkiaFramePresent.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/skia/Mixin_SkiaFramePresent.java @@ -9,7 +9,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //? if >= 26.2 { -/*// 26.2 removed RenderSystem.flipFrame. The frame is now presented in Minecraft.renderFrame: +// 26.2 removed RenderSystem.flipFrame. The frame is now presented in Minecraft.renderFrame: // GameRenderer.render -> GpuSurface.blitFromTexture(mainRenderTarget) -> GpuSurface.present(). // Flush queued Compose/Skia draws into the main render target before the blit so screenshots include them. @Mixin(Minecraft.class) @@ -21,9 +21,9 @@ public class Mixin_SkiaFramePresent { SkiaCtx.INSTANCE.draw(); } } -*///? } else { +//? } else { -// 26.1 removed Window.updateDisplay, which is where Mixin_SkiaFrame used to flush the GL Skia surface. +/*// 26.1 removed Window.updateDisplay, which is where Mixin_SkiaFrame used to flush the GL Skia surface. // Flush into the main render target before RenderTarget.blitToScreen (in renderFrame) so queued Compose/Skia // draws are included by screenshots and by the window blit. @Mixin(Minecraft.class) @@ -35,5 +35,5 @@ public class Mixin_SkiaFramePresent { SkiaCtx.INSTANCE.draw(); } } -//? } +*///? } //? } diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/OdinCompat.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/OdinCompat.kt index edd4e1a20..965ad0dcd 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/OdinCompat.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/OdinCompat.kt @@ -1,5 +1,5 @@ //? odin_compat { -package org.polyfrost.oneconfig.internal.compat +/*package org.polyfrost.oneconfig.internal.compat import com.odtheking.odin.clickgui.settings.RenderableSetting import com.odtheking.odin.clickgui.settings.Setting @@ -243,4 +243,4 @@ private object OdinSettingsAdapter { ) } } -//? } +*///? } diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/SkyCubedCompat.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/SkyCubedCompat.kt index 4c738052a..8099c174d 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/SkyCubedCompat.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/SkyCubedCompat.kt @@ -1,5 +1,5 @@ //? skycubed_compat { -package org.polyfrost.oneconfig.internal.compat +/*package org.polyfrost.oneconfig.internal.compat import com.teamresourceful.resourcefulconfig.api.types.ResourcefulConfig import com.teamresourceful.resourcefulconfig.api.types.elements.ResourcefulConfigEntryElement @@ -202,4 +202,4 @@ class SkyCubedHudWrapper(private val overlay: Overlay) : OneConfigHudWrapper { override fun linkedProperties(): List> = cachedProperties } -//? } +*///? } diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/RenderTargetFbo.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/RenderTargetFbo.kt index 40843ccf0..2ed55f66a 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/RenderTargetFbo.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/RenderTargetFbo.kt @@ -6,8 +6,8 @@ import org.polyfrost.oneconfig.internal.mixin.blaze3d.GlDeviceAccessor import org.polyfrost.oneconfig.internal.mixin.blaze3d.GpuDeviceAccessor //? } //? if >= 26.2 { -/*import com.mojang.blaze3d.opengl.FrameBufferAttachment -*///? } +import com.mojang.blaze3d.opengl.FrameBufferAttachment +//? } import com.mojang.blaze3d.pipeline.RenderTarget //? if >= 1.21.5 { import com.mojang.blaze3d.systems.RenderSystem @@ -19,7 +19,7 @@ import com.mojang.blaze3d.systems.RenderSystem */ object RenderTargetFbo { //? if >= 26.2 { - /*fun getFboId(frameBuffer: RenderTarget): Int { + fun getFboId(frameBuffer: RenderTarget): Int { val device = RenderSystem.getDevice() val backend = (device as GpuDeviceAccessor).`oneconfig$getBackend`() if (backend !is GlDeviceAccessor) return -1 @@ -28,8 +28,8 @@ object RenderTargetFbo { val depth = frameBuffer.depthTexture as? GlTexture return backend.`oneconfig$getFrameBufferCache`().getFbo(dsa, listOf(color), depth) } - *///? } else if >= 26.1 { - fun getFboId(frameBuffer: RenderTarget): Int { + //? } else if >= 26.1 { + /*fun getFboId(frameBuffer: RenderTarget): Int { val device = RenderSystem.getDevice() val backend = (device as GpuDeviceAccessor).`oneconfig$getBackend`() if (backend !is GlDeviceAccessor) return -1 @@ -37,7 +37,7 @@ object RenderTargetFbo { val texture = frameBuffer.colorTexture as? GlTexture ?: return -1 return texture.getFbo(dsa, frameBuffer.depthTexture) } - //? } else if >= 1.21.5 { + *///? } else if >= 1.21.5 { /*fun getFboId(frameBuffer: RenderTarget): Int { val device = RenderSystem.getDevice() if (device !is com.mojang.blaze3d.opengl.GlDevice) { diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/BlurRenderer.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/BlurRenderer.kt index 3e818f779..eb5359e90 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/BlurRenderer.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/BlurRenderer.kt @@ -50,7 +50,7 @@ object BlurRenderer { fun drawBlur(radius: Float = 8f) { if (radius < 0.5f) return SkiaCtx.queueDraw { - val target = client.mainRenderTarget + val target = client.gameRenderer.mainRenderTarget() drawRegion(SkiaCtx.canvas, 0f, 0f, target.width.toFloat(), target.height.toFloat(), radius) } } @@ -58,7 +58,7 @@ object BlurRenderer { fun drawRegion(canvas: Canvas, x: Float, y: Float, width: Float, height: Float, radius: Float) { if (width <= 0f || height <= 0f) return - val target = client.mainRenderTarget + val target = client.gameRenderer.mainRenderTarget() val srcWidth = target.width val srcHeight = target.height val sourceSurface = resolveSurface(target, srcWidth, srcHeight) ?: return diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt index aea7e0c2f..b33dbca7e 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt @@ -249,10 +249,10 @@ object SkiaCtx { fun takeWorldSnapshotIfNeeded() { if (!this::directContext.isInitialized || !isDeferredComposeBackend) return //? if >= 26.2 { - /*vulkanService?.takeWorldSnapshot(client.gameRenderer.mainRenderTarget()) - *///? } else { - vulkanService?.takeWorldSnapshot(client.mainRenderTarget) - //? } + vulkanService?.takeWorldSnapshot(client.gameRenderer.mainRenderTarget()) + //? } else { + /*vulkanService?.takeWorldSnapshot(client.mainRenderTarget) + *///? } } fun drawComposeBlit(ctx: GuiGraphicsExtractor, block: Runnable) { @@ -549,10 +549,10 @@ object SkiaCtx { if (rt == null || rt.width != w || rt.height != h) { destroyHudTarget() //? if >= 26.2 { - /*rt = TextureTarget(null, w, h, true, com.mojang.blaze3d.GpuFormat.RGBA8_UNORM) - *///? } else if >= 1.21.5 { - rt = TextureTarget(null, w, h, true) - //? } else if >= 1.21.4 { + rt = TextureTarget(null, w, h, true, com.mojang.blaze3d.GpuFormat.RGBA8_UNORM) + //? } else if >= 1.21.5 { + /*rt = TextureTarget(null, w, h, true) + *///? } else if >= 1.21.4 { // rt = TextureTarget(w, h, true) //? } else { /*rt = TextureTarget(w, h, true, Minecraft.ON_OSX) @@ -604,10 +604,10 @@ object SkiaCtx { if (rt == null || rt.width != w || rt.height != h) { destroyComposeTarget() //? if >= 26.2 { - /*rt = TextureTarget(null, w, h, true, com.mojang.blaze3d.GpuFormat.RGBA8_UNORM) - *///? } else if >= 1.21.5 { - rt = TextureTarget(null, w, h, true) - //? } else if >= 1.21.4 { + rt = TextureTarget(null, w, h, true, com.mojang.blaze3d.GpuFormat.RGBA8_UNORM) + //? } else if >= 1.21.5 { + /*rt = TextureTarget(null, w, h, true) + *///? } else if >= 1.21.4 { // rt = TextureTarget(w, h, true) //? } else { /*rt = TextureTarget(w, h, true, Minecraft.ON_OSX) @@ -664,10 +664,10 @@ object SkiaCtx { // 26.1+: SkiaCtx.draw() runs before RenderTarget.blitToScreen (Mixin_SkiaFramePresent), so compose // lands in Minecraft's main render target and is seen by the window blit, screenshots and Tracy captures. //? if >= 26.2 { - /*val target = client.gameRenderer.mainRenderTarget() - *///? } else { - val target = client.mainRenderTarget - //? } + val target = client.gameRenderer.mainRenderTarget() + //? } else { + /*val target = client.mainRenderTarget + *///? } val (brt, colorFmt) = svc.makeOffscreenBRT(target, w, h) glBrt = brt glSurface = Surface.makeFromBackendRenderTarget( diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/opengl/StoredGLState.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/opengl/StoredGLState.kt index 5ea320679..94b5322f5 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/opengl/StoredGLState.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/opengl/StoredGLState.kt @@ -126,10 +126,10 @@ class StoredGLState(private val glVersion: Int) { // and MC will skip the GL call on the next draw (e.g. item culling) until a full device // reset such as a window resize. Toggle through GlStateManager to force cache + GL sync. //? if >= 26.2 { - /*forceToggle(lastEnableBlend, { GlStateManager._enableBlend(0) }, { GlStateManager._disableBlend(0) }) - *///?} else { - forceToggle(lastEnableBlend, GlStateManager::_enableBlend, GlStateManager::_disableBlend) - //?} + forceToggle(lastEnableBlend, { GlStateManager._enableBlend(0) }, { GlStateManager._disableBlend(0) }) + //?} else { + /*forceToggle(lastEnableBlend, GlStateManager::_enableBlend, GlStateManager::_disableBlend) + *///?} forceToggle(lastEnableCullFace, GlStateManager::_enableCull, GlStateManager::_disableCull) forceToggle( lastEnableDepthTest, diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/hud/LegacyHudOffscreen.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/hud/LegacyHudOffscreen.kt index 898875c39..84affdae6 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/hud/LegacyHudOffscreen.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/hud/LegacyHudOffscreen.kt @@ -49,10 +49,10 @@ object LegacyHudOffscreen { destroy() try { //? if >= 26.2 { - /*val rt = TextureTarget(null, w, h, true, com.mojang.blaze3d.GpuFormat.RGBA8_UNORM) - *///? } else { - val rt = TextureTarget(null, w, h, true) - //? } + val rt = TextureTarget(null, w, h, true, com.mojang.blaze3d.GpuFormat.RGBA8_UNORM) + //? } else { + /*val rt = TextureTarget(null, w, h, true) + *///? } target = rt val svc = SkiaCtx.vulkanService ?: return false if (!SkiaCtx.isVulkanMode) { @@ -132,22 +132,22 @@ object LegacyHudOffscreen { val colorTex = rt.colorTexture ?: return val encoder = com.mojang.blaze3d.systems.RenderSystem.getDevice().createCommandEncoder() //? if >= 26.2 { - /*encoder.clearColorTexture(colorTex, org.joml.Vector4f(0f, 0f, 0f, 0f)) - *///? } else { - encoder.clearColorTexture(colorTex, 0) - //? } + encoder.clearColorTexture(colorTex, org.joml.Vector4f(0f, 0f, 0f, 0f)) + //? } else { + /*encoder.clearColorTexture(colorTex, 0) + *///? } val prevState = accessor.`oneconfig$getRenderState`() redirectTarget = rt try { accessor.`oneconfig$setRenderState`(state) //? if >= 26.2 { - /*guiRenderer.render() - *///? } else { - val fog = (client.gameRenderer as GameRendererAccessor).`oneconfig$getFogRenderer`() + guiRenderer.render() + //? } else { + /*val fog = (client.gameRenderer as GameRendererAccessor).`oneconfig$getFogRenderer`() .getBuffer(net.minecraft.client.renderer.fog.FogRenderer.FogMode.NONE) guiRenderer.render(fog) - //? } + *///? } } finally { redirectTarget = null accessor.`oneconfig$setRenderState`(prevState) diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/GLVulkanService.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/GLVulkanService.kt index 365a28791..4d8484d5c 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/GLVulkanService.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/GLVulkanService.kt @@ -27,7 +27,7 @@ object GLVulkanService : VulkanService { width: Int, height: Int, vkImageHandle: Long, vkFormat: Int, vkQueueFamily: Int, ): BackendRenderTarget { - val target = client.mainRenderTarget + val target = client.gameRenderer.mainRenderTarget() //? >= 1.21.5 { val frameBufferId = RenderTargetFbo.getFboId(target) //? } else diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt index 1949bad57..d74a0b526 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt @@ -1,7 +1,7 @@ package org.polyfrost.oneconfig.internal.ui.services //? if >= 26.2 { -/*import com.mojang.blaze3d.GpuFormat +import com.mojang.blaze3d.GpuFormat import com.mojang.blaze3d.pipeline.RenderTarget import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.vulkan.VulkanDevice @@ -132,4 +132,4 @@ class NativeVulkanService private constructor( } } } -*///? } +//? } diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/VulkanModVulkanService.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/VulkanModVulkanService.kt index 21032b15b..8768fbdd1 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/VulkanModVulkanService.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/VulkanModVulkanService.kt @@ -1,7 +1,7 @@ package org.polyfrost.oneconfig.internal.ui.services //? vulkanmod { -import com.mojang.blaze3d.pipeline.RenderTarget +/*import com.mojang.blaze3d.pipeline.RenderTarget import net.vulkanmod.gl.VkGlTexture import net.vulkanmod.vulkan.Renderer import net.vulkanmod.vulkan.device.DeviceManager @@ -240,4 +240,4 @@ class VulkanModVulkanService private constructor( } } } -//? } +*///? } diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/utils/v1/dsl/screens.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/utils/v1/dsl/screens.kt index 18715caf1..ec868f7ea 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/utils/v1/dsl/screens.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/utils/v1/dsl/screens.kt @@ -86,11 +86,11 @@ fun Config.openUI(initialCategory: String) = Platform.screen().display(createScr fun Config.addDefaultCommand(command: String = this.title.lowercase()): LiteralArgumentBuilder { return CommandManager.literal(command).executes { ctx -> //? if >= 26.2 { - /*Minecraft.getInstance().gui.setScreen(this.createScreen()) - *///?} else { - Minecraft.getInstance().screen?.onClose() + Minecraft.getInstance().gui.setScreen(this.createScreen()) + //?} else { + /*Minecraft.getInstance().screen?.onClose() Minecraft.getInstance().screen = this.createScreen() - //?} + *///?} 1 } } diff --git a/minecraft/stonecutter.gradle.kts b/minecraft/stonecutter.gradle.kts index ed2e28907..8e83f2426 100644 --- a/minecraft/stonecutter.gradle.kts +++ b/minecraft/stonecutter.gradle.kts @@ -2,7 +2,7 @@ plugins { id("dev.kikugie.stonecutter") } -stonecutter active "26.1-fabric" +stonecutter active "26.2-fabric" stonecutter { parameters { constants { From f3d44f556c87fef49fa3a3b4ae2f8ebdb1865341 Mon Sep 17 00:00:00 2001 From: awruff Date: Wed, 22 Jul 2026 13:37:43 -0400 Subject: [PATCH 2/5] fix: rendering corruption when opening the UI on native Vulkan --- .../oneconfig/internal/ui/compose/SkiaCtx.kt | 31 +++++++++--- .../ui/services/NativeVulkanService.kt | 48 ++++++++++++++++++- .../internal/ui/services/VulkanService.kt | 6 +++ 3 files changed, 77 insertions(+), 8 deletions(-) diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt index b33dbca7e..89a010b38 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt @@ -313,7 +313,7 @@ object SkiaCtx { fun blitHud(guiGraphics: GuiGraphicsExtractor) { val rt = hudTarget ?: return - val w = rt.width; + val w = rt.width val h = rt.height val guiScale = client.window.guiScale.toFloat() @@ -328,6 +328,7 @@ object SkiaCtx { wrapper.setGpuTexture(colorTex) //? >= 1.21.8 { wrapper.setGpuTextureView(rt.getColorTextureView()) + vulkanService?.transitionOffscreenForSampling(rt) guiGraphics.pose().pushMatrix() guiGraphics.pose().scale(1f / guiScale, 1f / guiScale) guiGraphics.blit(net.minecraft.client.renderer.RenderPipelines.GUI_TEXTURED, HUD_TEXTURE_LOC, 0, 0, 0f, 0f, w, h, w, h) @@ -377,6 +378,7 @@ object SkiaCtx { wrapper.setGpuTexture(colorTex) //? >= 1.21.8 { wrapper.setGpuTextureView(rt.getColorTextureView()) + vulkanService?.transitionOffscreenForSampling(rt) guiGraphics.pose().pushMatrix() guiGraphics.pose().scale(1f / guiScale, 1f / guiScale) guiGraphics.blit(net.minecraft.client.renderer.RenderPipelines.GUI_TEXTURED, COMPOSE_TEXTURE_LOC, 0, 0, 0f, 0f, w, h, w, h) @@ -471,6 +473,7 @@ object SkiaCtx { if (isVulkanMode) { directContext.flushAndSubmit(mainSurface, false) + vulkanService?.restoreMainRTLayout() } else { directContext.flush() // if (profiling) { @@ -546,7 +549,8 @@ object SkiaCtx { if (w <= 0 || h <= 0) return null var rt = hudTarget - if (rt == null || rt.width != w || rt.height != h) { + val needNewTarget = rt == null || rt.width != w || rt.height != h + if (needNewTarget) { destroyHudTarget() //? if >= 26.2 { rt = TextureTarget(null, w, h, true, com.mojang.blaze3d.GpuFormat.RGBA8_UNORM) @@ -559,7 +563,6 @@ object SkiaCtx { *///? } hudTarget = rt - val svc = vulkanService ?: return null //? >= 1.21.5 { if (!isVulkanMode) { val fboId = org.polyfrost.oneconfig.internal.ui.RenderTargetFbo.getFboId(rt) @@ -571,6 +574,13 @@ object SkiaCtx { } } //? } + } + + val rewrap = vulkanService?.offscreenNeedsPerFrameRewrap == true + if (needNewTarget || rewrap || hudSurface == null) { + hudSurface?.close(); hudSurface = null + hudBrt?.close(); hudBrt = null + val svc = vulkanService ?: return null val (brt, colorFmt) = svc.makeOffscreenBRT(rt, w, h) hudBrt = brt hudSurface = Surface.makeFromBackendRenderTarget( @@ -601,7 +611,8 @@ object SkiaCtx { if (w <= 0 || h <= 0) return null var rt = composeTarget - if (rt == null || rt.width != w || rt.height != h) { + val needNewTarget = rt == null || rt.width != w || rt.height != h + if (needNewTarget) { destroyComposeTarget() //? if >= 26.2 { rt = TextureTarget(null, w, h, true, com.mojang.blaze3d.GpuFormat.RGBA8_UNORM) @@ -614,7 +625,6 @@ object SkiaCtx { *///? } composeTarget = rt - val svc = vulkanService ?: return null //? >= 1.21.5 { if (!isVulkanMode) { val fboId = org.polyfrost.oneconfig.internal.ui.RenderTargetFbo.getFboId(rt) @@ -626,7 +636,14 @@ object SkiaCtx { } } //? } - val (brt, colorFmt) = svc.makeOffscreenBRT(rt, w, h) + } + + val rewrap = vulkanService?.offscreenNeedsPerFrameRewrap == true + if (needNewTarget || rewrap || composeSurface == null) { + composeSurface?.close(); composeSurface = null + composeBrt?.close(); composeBrt = null + val svc = vulkanService ?: return null + val (brt, colorFmt) = svc.makeOffscreenBRT(rt!!, w, h) composeBrt = brt val composeOrigin = if (isVulkanMode) SurfaceOrigin.TOP_LEFT else SurfaceOrigin.BOTTOM_LEFT composeSurface = Surface.makeFromBackendRenderTarget( @@ -701,7 +718,7 @@ object SkiaCtx { val h = client.window.height if (w <= 0 || h <= 0) return null - if (w != vkSurfaceWidth || h != vkSurfaceHeight) { + if (w != vkSurfaceWidth || h != vkSurfaceHeight || svc.offscreenNeedsPerFrameRewrap) { invalidateVkSurfaces() vkSurfaceWidth = w vkSurfaceHeight = h diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt index d74a0b526..d12f12c52 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt @@ -10,8 +10,10 @@ import net.minecraft.client.Minecraft import org.jetbrains.skia.BackendRenderTarget import org.jetbrains.skia.DirectContext import org.jetbrains.skia.SurfaceColorFormat +import org.lwjgl.system.MemoryStack import org.lwjgl.vulkan.VK import org.lwjgl.vulkan.VK12.* +import org.lwjgl.vulkan.VkImageMemoryBarrier import org.polyfrost.oneconfig.internal.mixin.blaze3d.GpuDeviceAccessor import org.slf4j.LoggerFactory @@ -31,6 +33,8 @@ class NativeVulkanService private constructor( override val isVulkan = true + override val offscreenNeedsPerFrameRewrap = true + override fun makeDirectContext(): DirectContext { val provider = VK.getFunctionProvider() val instanceProcAddr = provider.getFunctionAddress("vkGetInstanceProcAddr") @@ -51,7 +55,7 @@ class NativeVulkanService private constructor( width, height, vkImageHandle, VK_IMAGE_TILING_OPTIMAL, - VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + VK_IMAGE_LAYOUT_GENERAL, vkFormat, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT or VK_IMAGE_USAGE_TRANSFER_DST_BIT or VK_IMAGE_USAGE_SAMPLED_BIT or VK_IMAGE_USAGE_TRANSFER_SRC_BIT, @@ -86,11 +90,53 @@ class NativeVulkanService private constructor( Triple(0L, 0, 0) } + override fun restoreMainRTLayout() { + restoreToGeneral(Minecraft.getInstance().gameRenderer.mainRenderTarget().colorTexture as? VulkanGpuTexture) + } + + override fun transitionOffscreenForSampling(target: RenderTarget) { + restoreToGeneral(target.colorTexture as? VulkanGpuTexture) + } + override fun midFrameFlush() { // Submit MC's pending command buffer so Skia sees a consistent image state. RenderSystem.getDevice().createCommandEncoder().submit() } + private fun restoreToGeneral(tex: VulkanGpuTexture?) { + if (tex == null) return + try { + val device = (RenderSystem.getDevice() as? GpuDeviceAccessor)?.`oneconfig$getBackend`() as? VulkanDevice ?: return + val encoder = device.createCommandEncoder() + val cmd = encoder.allocateAndBeginTransientCommandBuffer() + try { + MemoryStack.stackPush().use { stack -> + val barrier = VkImageMemoryBarrier.calloc(1, stack) + .sType(VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER) + .oldLayout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) + .newLayout(VK_IMAGE_LAYOUT_GENERAL) + .srcAccessMask(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT) + .dstAccessMask(VK_ACCESS_MEMORY_READ_BIT or VK_ACCESS_MEMORY_WRITE_BIT) + .srcQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) + .dstQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) + .image(tex.vkImage()) + barrier.subresourceRange() + .aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) + .baseMipLevel(0).levelCount(1).baseArrayLayer(0).layerCount(1) + vkCmdPipelineBarrier( + cmd, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, + null, null, barrier, + ) + } + } finally { + vkEndCommandBuffer(cmd) + encoder.execute(cmd) + } + } catch (e: Exception) { + LOG.warn("restoreToGeneral failed", e) + } + } + companion object { private val LOG = LoggerFactory.getLogger(NativeVulkanService::class.java) diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/VulkanService.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/VulkanService.kt index 6578b2a86..682ab158a 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/VulkanService.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/VulkanService.kt @@ -18,6 +18,12 @@ interface VulkanService { */ val usesDeferredCompose: Boolean get() = false + val offscreenNeedsPerFrameRewrap: Boolean get() = false + + fun transitionOffscreenForSampling(target: RenderTarget) {} + + fun restoreMainRTLayout() {} + fun makeDirectContext(): DirectContext /** From b2f19776323315303d95a39a23d0f734fb93584b Mon Sep 17 00:00:00 2001 From: awruff Date: Wed, 22 Jul 2026 20:17:21 -0400 Subject: [PATCH 3/5] chore: set vcs to 26.1 --- bootstrap/stonecutter.gradle.kts | 2 +- .../v1/internal/I18nPlatformImpl.java | 12 +++---- .../v1/internal/ScreenPlatformImpl.java | 18 +++++------ .../oneconfig/internal/OneConfig.java | 10 +++--- .../internal/OneConfigMixinInit.java | 6 ++-- .../mixin/blaze3d/GlDeviceAccessor.java | 8 ++--- .../compat/odin/Mixin_OdinModuleManager.java | 4 +-- .../mixin/compat/skycubed/Mixin_SkyCubed.java | 4 +-- .../skycubed/Mixin_SkyCubedOverlays.java | 4 +-- .../events/Mixin_FramebufferRenderEvent.java | 16 +++++----- .../mixin/events/Mixin_HudRenderEvent.java | 16 +++++----- .../mixin/events/Mixin_MouseInputEvent.java | 8 ++--- .../events/Mixin_RenderLivingEntityEvent.java | 4 +-- .../skia/Mixin_GuiRendererLegacyTarget.java | 16 +++++----- .../mixin/skia/Mixin_SkiaFramePresent.java | 8 ++--- .../oneconfig/internal/compat/OdinCompat.kt | 4 +-- .../internal/compat/SkyCubedCompat.kt | 4 +-- .../oneconfig/internal/ui/RenderTargetFbo.kt | 12 +++---- .../internal/ui/compose/BlurRenderer.kt | 4 +-- .../oneconfig/internal/ui/compose/SkiaCtx.kt | 32 +++++++++---------- .../ui/compose/opengl/StoredGLState.kt | 8 ++--- .../internal/ui/hud/LegacyHudOffscreen.kt | 24 +++++++------- .../internal/ui/services/GLVulkanService.kt | 2 +- .../ui/services/NativeVulkanService.kt | 4 +-- .../ui/services/VulkanModVulkanService.kt | 4 +-- .../oneconfig/utils/v1/dsl/screens.kt | 8 ++--- minecraft/stonecutter.gradle.kts | 2 +- 27 files changed, 122 insertions(+), 122 deletions(-) diff --git a/bootstrap/stonecutter.gradle.kts b/bootstrap/stonecutter.gradle.kts index 232111f72..c6ec245b8 100644 --- a/bootstrap/stonecutter.gradle.kts +++ b/bootstrap/stonecutter.gradle.kts @@ -2,7 +2,7 @@ plugins { id("dev.kikugie.stonecutter") } -stonecutter active "26.2-fabric" +stonecutter active "26.1-fabric" stonecutter tasks { order("publishModrinth") } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/I18nPlatformImpl.java b/minecraft/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/I18nPlatformImpl.java index fc226c1b4..c4bb75724 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/I18nPlatformImpl.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/I18nPlatformImpl.java @@ -29,8 +29,8 @@ import net.minecraft.ChatFormatting; import net.minecraft.client.resources.language.I18n; //? if >= 26.2 { -import net.minecraft.locale.Language; -//?} +/*import net.minecraft.locale.Language; +*///?} import net.minecraft.network.chat.Component; import net.minecraft.network.chat.FormattedText; import net.minecraft.util.FormattedCharSequence; @@ -51,10 +51,10 @@ public String translateString(String key, Object... args) { @Override public boolean hasTranslation(String key) { //? if >= 26.2 { - return Language.getInstance().has(key); - //?} else { - /*return I18n.exists(key); - *///?} + /*return Language.getInstance().has(key); + *///?} else { + return I18n.exists(key); + //?} } @Override diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/ScreenPlatformImpl.java b/minecraft/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/ScreenPlatformImpl.java index 43b8fe211..e4e948409 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/ScreenPlatformImpl.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/api/platform/v1/internal/ScreenPlatformImpl.java @@ -96,21 +96,21 @@ public void display(@Nullable Object screen, int ticks) { return; } //? if >= 26.2 { - // 26.2 removed Minecraft#setScreen. Use Gui#setScreen, not setScreenAndShow (which force-calls + /*// 26.2 removed Minecraft#setScreen. Use Gui#setScreen, not setScreenAndShow (which force-calls // renderFrame and re-enters our renderFrame mixin -> nested frame -> 1-frame black flash). if (ticks < 1) Minecraft.getInstance().gui.setScreen((Screen) screen); else EventDelay.tick(ticks, () -> Minecraft.getInstance().gui.setScreen((Screen) screen)); - //?} else { - /*if (ticks < 1) Minecraft.getInstance().setScreen((Screen) screen); + *///?} else { + if (ticks < 1) Minecraft.getInstance().setScreen((Screen) screen); else EventDelay.tick(ticks, () -> Minecraft.getInstance().setScreen((Screen) screen)); - *///?} + //?} } private void warnUiUnavailable() { String reason = SkiaCtx.INSTANCE.unavailableReason(); if (reason == null) return; //~ if >= 26.2 'gui.getChat' -> 'gui.hud.getChat' - Minecraft.getInstance().gui.hud.getChat() + Minecraft.getInstance().gui.getChat() //~ if >= 26.1 'addMessage' -> 'addClientSystemMessage' .addClientSystemMessage(Component.literal(reason).withStyle(ChatFormatting.RED)); } @@ -119,10 +119,10 @@ private void warnUiUnavailable() { @SuppressWarnings("unchecked" /*, reason = "reduces friction between versions" */) public @Nullable T current() { //? if >= 26.2 { - return (T) Minecraft.getInstance().gui.screen(); - //?} else { - /*return (T) Minecraft.getInstance().screen; - *///?} + /*return (T) Minecraft.getInstance().gui.screen(); + *///?} else { + return (T) Minecraft.getInstance().screen; + //?} } } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/OneConfig.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/OneConfig.java index c44d2c711..c5d28ccad 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/OneConfig.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/OneConfig.java @@ -109,10 +109,10 @@ private static void registerCommands() { public static boolean isInChatScreen() { //? if >= 26.2 { - return Minecraft.getInstance().gui.screen() instanceof ChatScreen; - //?} else { - /*return Minecraft.getInstance().screen instanceof ChatScreen; - *///?} + /*return Minecraft.getInstance().gui.screen() instanceof ChatScreen; + *///?} else { + return Minecraft.getInstance().screen instanceof ChatScreen; + //?} } private static void registerKeybinds() { @@ -132,7 +132,7 @@ private static void registerKeybinds() { Platform.screen().display(new OneConfigUIScreen()); } catch (Throwable t) { //~ if >= 26.2 'gui.getChat' -> 'gui.hud.getChat' - Minecraft.getInstance().gui.hud.getChat() + Minecraft.getInstance().gui.getChat() //~ if >= 26.1 'addMessage' -> 'addClientSystemMessage' .addClientSystemMessage(Component.literal("Failed to open OneConfig UI: " + t.getMessage() + ". Please report this!") .withStyle( diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/OneConfigMixinInit.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/OneConfigMixinInit.java index 6810895a1..a401c8311 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/OneConfigMixinInit.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/OneConfigMixinInit.java @@ -81,7 +81,7 @@ public List getMixins() { //mixins.add("compat.DandelionScreenImplMixin"); //? odin_compat - //mixins.add("compat.odin.Mixin_OdinModuleManager"); + mixins.add("compat.odin.Mixin_OdinModuleManager"); //? rconfig_compat mixins.add("compat.rconfig.Mixin_Configurations"); @@ -98,9 +98,9 @@ public List getMixins() { mixins.add("compat.tr7zw.Mixin_AbstractConfigScreen"); //? skycubed_compat { - /*mixins.add("compat.skycubed.Mixin_SkyCubed"); + mixins.add("compat.skycubed.Mixin_SkyCubed"); mixins.add("compat.skycubed.Mixin_SkyCubedOverlays"); - *///? } + //? } //? skyblocker_compat { mixins.add("compat.skyblocker.Mixin_SkyblockerFancyStatusBars"); diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/blaze3d/GlDeviceAccessor.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/blaze3d/GlDeviceAccessor.java index 2de48406a..6493256a3 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/blaze3d/GlDeviceAccessor.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/blaze3d/GlDeviceAccessor.java @@ -5,8 +5,8 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; //? >= 26.2 { -import com.mojang.blaze3d.opengl.FrameBufferCache; -//? } +/*import com.mojang.blaze3d.opengl.FrameBufferCache; +*///? } @Mixin(targets = "com.mojang.blaze3d.opengl.GlDevice") public interface GlDeviceAccessor { @@ -14,8 +14,8 @@ public interface GlDeviceAccessor { DirectStateAccess oneconfig$getDirectStateAccess(); //? >= 26.2 { - @Invoker("frameBufferCache") + /*@Invoker("frameBufferCache") FrameBufferCache oneconfig$getFrameBufferCache(); - //? } + *///? } } //? } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/odin/Mixin_OdinModuleManager.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/odin/Mixin_OdinModuleManager.java index a675d4f44..6f87f4aac 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/odin/Mixin_OdinModuleManager.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/odin/Mixin_OdinModuleManager.java @@ -1,7 +1,7 @@ package org.polyfrost.oneconfig.internal.mixin.compat.odin; //? odin_compat { -/*import com.odtheking.odin.features.ModuleManager; +import com.odtheking.odin.features.ModuleManager; import org.polyfrost.oneconfig.internal.compat.OdinCompat; import org.polyfrost.oneconfig.internal.ui.hud.CompatOverlayRenderer; import org.spongepowered.asm.mixin.Mixin; @@ -22,4 +22,4 @@ public class Mixin_OdinModuleManager { } } } -*///? } +//? } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/skycubed/Mixin_SkyCubed.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/skycubed/Mixin_SkyCubed.java index cc291b073..af83072ed 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/skycubed/Mixin_SkyCubed.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/skycubed/Mixin_SkyCubed.java @@ -1,7 +1,7 @@ package org.polyfrost.oneconfig.internal.mixin.compat.skycubed; //? skycubed_compat { -/*import org.polyfrost.oneconfig.internal.compat.SkyCubedCompat; +import org.polyfrost.oneconfig.internal.compat.SkyCubedCompat; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.injection.At; @@ -18,4 +18,4 @@ public class Mixin_SkyCubed { SkyCubedCompat.initialize(); } } -*///? } +//? } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/skycubed/Mixin_SkyCubedOverlays.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/skycubed/Mixin_SkyCubedOverlays.java index 58198d620..77a80d947 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/skycubed/Mixin_SkyCubedOverlays.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/compat/skycubed/Mixin_SkyCubedOverlays.java @@ -1,7 +1,7 @@ package org.polyfrost.oneconfig.internal.mixin.compat.skycubed; //? skycubed_compat { -/*import me.owdding.lib.overlays.Overlays; +import me.owdding.lib.overlays.Overlays; import org.polyfrost.oneconfig.internal.ui.hud.CompatOverlayRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; @@ -20,4 +20,4 @@ public class Mixin_SkyCubedOverlays { } } } -*///? } +//? } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_FramebufferRenderEvent.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_FramebufferRenderEvent.java index 91c123594..fdb39f4be 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_FramebufferRenderEvent.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_FramebufferRenderEvent.java @@ -14,10 +14,10 @@ public class Mixin_FramebufferRenderEvent { //~ if >= 26.1 'runTick' -> 'renderFrame' @Inject(method = "renderFrame", at = @At(value = "INVOKE", //? if >= 26.2 { - target = "Lcom/mojang/blaze3d/systems/GpuSurface;present()V" - //?} elif 26.1 { - /*target = "Lcom/mojang/blaze3d/systems/RenderSystem;flipFrame(Lcom/mojang/blaze3d/TracyFrameCapture;)V" - *///?} elif >= 1.21.4 { + /*target = "Lcom/mojang/blaze3d/systems/GpuSurface;present()V" + *///?} elif 26.1 { + target = "Lcom/mojang/blaze3d/systems/RenderSystem;flipFrame(Lcom/mojang/blaze3d/TracyFrameCapture;)V" + //?} elif >= 1.21.4 { /*target = "Lcom/mojang/blaze3d/platform/Window;updateDisplay(Lcom/mojang/blaze3d/TracyFrameCapture;)V" *///?} else //target = "Lcom/mojang/blaze3d/platform/Window;updateDisplay()V" @@ -29,10 +29,10 @@ private void preFramebufferRenderCallback(CallbackInfo ci) { //~ if >= 26.1 'runTick' -> 'renderFrame' @Inject(method = "renderFrame", at = @At(value = "INVOKE", //? if >= 26.2 { - target = "Lcom/mojang/blaze3d/systems/GpuSurface;present()V", - //?} elif 26.1 { - /*target = "Lcom/mojang/blaze3d/systems/RenderSystem;flipFrame(Lcom/mojang/blaze3d/TracyFrameCapture;)V", - *///?} elif >= 1.21.4 { + /*target = "Lcom/mojang/blaze3d/systems/GpuSurface;present()V", + *///?} elif 26.1 { + target = "Lcom/mojang/blaze3d/systems/RenderSystem;flipFrame(Lcom/mojang/blaze3d/TracyFrameCapture;)V", + //?} elif >= 1.21.4 { /*target = "Lcom/mojang/blaze3d/platform/Window;updateDisplay(Lcom/mojang/blaze3d/TracyFrameCapture;)V", *///?} else //target = "Lcom/mojang/blaze3d/platform/Window;updateDisplay()V", diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_HudRenderEvent.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_HudRenderEvent.java index 0da7c4a85..021c11090 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_HudRenderEvent.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_HudRenderEvent.java @@ -3,10 +3,10 @@ //~ gui_graphics import net.minecraft.client.DeltaTracker; //? >= 26.2 { -import net.minecraft.client.gui.Hud; -//? } else { -/*import net.minecraft.client.gui.Gui; -*///? } +/*import net.minecraft.client.gui.Hud; +*///? } else { +import net.minecraft.client.gui.Gui; +//? } import net.minecraft.client.gui.GuiGraphicsExtractor; import org.polyfrost.oneconfig.internal.OneConfig; import org.polyfrost.oneconfig.internal.ui.compose.SkiaCtx; @@ -16,10 +16,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //? if >= 26.2 { - @Mixin(Hud.class) -//? } else { -/*@Mixin(Gui.class) -*///? } + /*@Mixin(Hud.class) +*///? } else { +@Mixin(Gui.class) +//? } public class Mixin_HudRenderEvent { //~ if >= 26.1 'render' -> 'extractRenderState' diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_MouseInputEvent.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_MouseInputEvent.java index e19b881c8..fef481df5 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_MouseInputEvent.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_MouseInputEvent.java @@ -22,10 +22,10 @@ private void mouseCallback(long window, MouseButtonInfo buttonInfo, int action, @Inject(method = "onMove", at = @At("HEAD")) private void mouseMoveCallback(long handle, double x, double y, CallbackInfo ci) { //? if >= 26.2 { - if (Minecraft.getInstance().gui.screen() != null) { - //?} else { - /*if (Minecraft.getInstance().screen != null) { - *///?} + /*if (Minecraft.getInstance().gui.screen() != null) { + *///?} else { + if (Minecraft.getInstance().screen != null) { + //?} MouseInputEvent.Moved.post((float) x, (float) y); } } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_RenderLivingEntityEvent.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_RenderLivingEntityEvent.java index c5fc0073e..49fd6ac93 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_RenderLivingEntityEvent.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/events/Mixin_RenderLivingEntityEvent.java @@ -3,8 +3,8 @@ import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; //? < 26.2 { -/*import net.minecraft.client.renderer.MultiBufferSource; -*///? } +import net.minecraft.client.renderer.MultiBufferSource; +//? } import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.world.entity.LivingEntity; import org.polyfrost.oneconfig.api.event.v1.EventManager; diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/skia/Mixin_GuiRendererLegacyTarget.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/skia/Mixin_GuiRendererLegacyTarget.java index 3a18af8fb..ea279ff6f 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/skia/Mixin_GuiRendererLegacyTarget.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/skia/Mixin_GuiRendererLegacyTarget.java @@ -4,10 +4,10 @@ import com.mojang.blaze3d.pipeline.RenderTarget; import net.minecraft.client.gui.render.GuiRenderer; //? if >= 26.2 { -import net.minecraft.client.renderer.GameRenderer; -//? } else { -/*import net.minecraft.client.Minecraft; -*///? } +/*import net.minecraft.client.renderer.GameRenderer; +*///? } else { +import net.minecraft.client.Minecraft; +//? } import org.polyfrost.oneconfig.internal.ui.hud.LegacyHudOffscreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -16,7 +16,7 @@ @Mixin(GuiRenderer.class) public class Mixin_GuiRendererLegacyTarget { //? if >= 26.2 { - @Redirect( + /*@Redirect( method = "draw", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;mainRenderTarget()Lcom/mojang/blaze3d/pipeline/RenderTarget;") ) @@ -24,8 +24,8 @@ public class Mixin_GuiRendererLegacyTarget { RenderTarget override = LegacyHudOffscreen.INSTANCE.redirectTarget; return override != null ? override : instance.mainRenderTarget(); } - //? } else { - /*@Redirect( + *///? } else { + @Redirect( method = "draw", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getMainRenderTarget()Lcom/mojang/blaze3d/pipeline/RenderTarget;") ) @@ -33,6 +33,6 @@ public class Mixin_GuiRendererLegacyTarget { RenderTarget override = LegacyHudOffscreen.INSTANCE.redirectTarget; return override != null ? override : instance.getMainRenderTarget(); } - *///? } + //? } } //? } diff --git a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/skia/Mixin_SkiaFramePresent.java b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/skia/Mixin_SkiaFramePresent.java index 16bf59745..397b5f04f 100644 --- a/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/skia/Mixin_SkiaFramePresent.java +++ b/minecraft/src/main/java/org/polyfrost/oneconfig/internal/mixin/skia/Mixin_SkiaFramePresent.java @@ -9,7 +9,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //? if >= 26.2 { -// 26.2 removed RenderSystem.flipFrame. The frame is now presented in Minecraft.renderFrame: +/*// 26.2 removed RenderSystem.flipFrame. The frame is now presented in Minecraft.renderFrame: // GameRenderer.render -> GpuSurface.blitFromTexture(mainRenderTarget) -> GpuSurface.present(). // Flush queued Compose/Skia draws into the main render target before the blit so screenshots include them. @Mixin(Minecraft.class) @@ -21,9 +21,9 @@ public class Mixin_SkiaFramePresent { SkiaCtx.INSTANCE.draw(); } } -//? } else { +*///? } else { -/*// 26.1 removed Window.updateDisplay, which is where Mixin_SkiaFrame used to flush the GL Skia surface. +// 26.1 removed Window.updateDisplay, which is where Mixin_SkiaFrame used to flush the GL Skia surface. // Flush into the main render target before RenderTarget.blitToScreen (in renderFrame) so queued Compose/Skia // draws are included by screenshots and by the window blit. @Mixin(Minecraft.class) @@ -35,5 +35,5 @@ public class Mixin_SkiaFramePresent { SkiaCtx.INSTANCE.draw(); } } -*///? } +//? } //? } diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/OdinCompat.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/OdinCompat.kt index 965ad0dcd..edd4e1a20 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/OdinCompat.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/OdinCompat.kt @@ -1,5 +1,5 @@ //? odin_compat { -/*package org.polyfrost.oneconfig.internal.compat +package org.polyfrost.oneconfig.internal.compat import com.odtheking.odin.clickgui.settings.RenderableSetting import com.odtheking.odin.clickgui.settings.Setting @@ -243,4 +243,4 @@ private object OdinSettingsAdapter { ) } } -*///? } +//? } diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/SkyCubedCompat.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/SkyCubedCompat.kt index 8099c174d..4c738052a 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/SkyCubedCompat.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/compat/SkyCubedCompat.kt @@ -1,5 +1,5 @@ //? skycubed_compat { -/*package org.polyfrost.oneconfig.internal.compat +package org.polyfrost.oneconfig.internal.compat import com.teamresourceful.resourcefulconfig.api.types.ResourcefulConfig import com.teamresourceful.resourcefulconfig.api.types.elements.ResourcefulConfigEntryElement @@ -202,4 +202,4 @@ class SkyCubedHudWrapper(private val overlay: Overlay) : OneConfigHudWrapper { override fun linkedProperties(): List> = cachedProperties } -*///? } +//? } diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/RenderTargetFbo.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/RenderTargetFbo.kt index 2ed55f66a..40843ccf0 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/RenderTargetFbo.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/RenderTargetFbo.kt @@ -6,8 +6,8 @@ import org.polyfrost.oneconfig.internal.mixin.blaze3d.GlDeviceAccessor import org.polyfrost.oneconfig.internal.mixin.blaze3d.GpuDeviceAccessor //? } //? if >= 26.2 { -import com.mojang.blaze3d.opengl.FrameBufferAttachment -//? } +/*import com.mojang.blaze3d.opengl.FrameBufferAttachment +*///? } import com.mojang.blaze3d.pipeline.RenderTarget //? if >= 1.21.5 { import com.mojang.blaze3d.systems.RenderSystem @@ -19,7 +19,7 @@ import com.mojang.blaze3d.systems.RenderSystem */ object RenderTargetFbo { //? if >= 26.2 { - fun getFboId(frameBuffer: RenderTarget): Int { + /*fun getFboId(frameBuffer: RenderTarget): Int { val device = RenderSystem.getDevice() val backend = (device as GpuDeviceAccessor).`oneconfig$getBackend`() if (backend !is GlDeviceAccessor) return -1 @@ -28,8 +28,8 @@ object RenderTargetFbo { val depth = frameBuffer.depthTexture as? GlTexture return backend.`oneconfig$getFrameBufferCache`().getFbo(dsa, listOf(color), depth) } - //? } else if >= 26.1 { - /*fun getFboId(frameBuffer: RenderTarget): Int { + *///? } else if >= 26.1 { + fun getFboId(frameBuffer: RenderTarget): Int { val device = RenderSystem.getDevice() val backend = (device as GpuDeviceAccessor).`oneconfig$getBackend`() if (backend !is GlDeviceAccessor) return -1 @@ -37,7 +37,7 @@ object RenderTargetFbo { val texture = frameBuffer.colorTexture as? GlTexture ?: return -1 return texture.getFbo(dsa, frameBuffer.depthTexture) } - *///? } else if >= 1.21.5 { + //? } else if >= 1.21.5 { /*fun getFboId(frameBuffer: RenderTarget): Int { val device = RenderSystem.getDevice() if (device !is com.mojang.blaze3d.opengl.GlDevice) { diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/BlurRenderer.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/BlurRenderer.kt index eb5359e90..3e818f779 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/BlurRenderer.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/BlurRenderer.kt @@ -50,7 +50,7 @@ object BlurRenderer { fun drawBlur(radius: Float = 8f) { if (radius < 0.5f) return SkiaCtx.queueDraw { - val target = client.gameRenderer.mainRenderTarget() + val target = client.mainRenderTarget drawRegion(SkiaCtx.canvas, 0f, 0f, target.width.toFloat(), target.height.toFloat(), radius) } } @@ -58,7 +58,7 @@ object BlurRenderer { fun drawRegion(canvas: Canvas, x: Float, y: Float, width: Float, height: Float, radius: Float) { if (width <= 0f || height <= 0f) return - val target = client.gameRenderer.mainRenderTarget() + val target = client.mainRenderTarget val srcWidth = target.width val srcHeight = target.height val sourceSurface = resolveSurface(target, srcWidth, srcHeight) ?: return diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt index 89a010b38..831c143ea 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt @@ -249,10 +249,10 @@ object SkiaCtx { fun takeWorldSnapshotIfNeeded() { if (!this::directContext.isInitialized || !isDeferredComposeBackend) return //? if >= 26.2 { - vulkanService?.takeWorldSnapshot(client.gameRenderer.mainRenderTarget()) - //? } else { - /*vulkanService?.takeWorldSnapshot(client.mainRenderTarget) - *///? } + /*vulkanService?.takeWorldSnapshot(client.gameRenderer.mainRenderTarget()) + *///? } else { + vulkanService?.takeWorldSnapshot(client.mainRenderTarget) + //? } } fun drawComposeBlit(ctx: GuiGraphicsExtractor, block: Runnable) { @@ -553,10 +553,10 @@ object SkiaCtx { if (needNewTarget) { destroyHudTarget() //? if >= 26.2 { - rt = TextureTarget(null, w, h, true, com.mojang.blaze3d.GpuFormat.RGBA8_UNORM) - //? } else if >= 1.21.5 { - /*rt = TextureTarget(null, w, h, true) - *///? } else if >= 1.21.4 { + /*rt = TextureTarget(null, w, h, true, com.mojang.blaze3d.GpuFormat.RGBA8_UNORM) + *///? } else if >= 1.21.5 { + rt = TextureTarget(null, w, h, true) + //? } else if >= 1.21.4 { // rt = TextureTarget(w, h, true) //? } else { /*rt = TextureTarget(w, h, true, Minecraft.ON_OSX) @@ -615,10 +615,10 @@ object SkiaCtx { if (needNewTarget) { destroyComposeTarget() //? if >= 26.2 { - rt = TextureTarget(null, w, h, true, com.mojang.blaze3d.GpuFormat.RGBA8_UNORM) - //? } else if >= 1.21.5 { - /*rt = TextureTarget(null, w, h, true) - *///? } else if >= 1.21.4 { + /*rt = TextureTarget(null, w, h, true, com.mojang.blaze3d.GpuFormat.RGBA8_UNORM) + *///? } else if >= 1.21.5 { + rt = TextureTarget(null, w, h, true) + //? } else if >= 1.21.4 { // rt = TextureTarget(w, h, true) //? } else { /*rt = TextureTarget(w, h, true, Minecraft.ON_OSX) @@ -681,10 +681,10 @@ object SkiaCtx { // 26.1+: SkiaCtx.draw() runs before RenderTarget.blitToScreen (Mixin_SkiaFramePresent), so compose // lands in Minecraft's main render target and is seen by the window blit, screenshots and Tracy captures. //? if >= 26.2 { - val target = client.gameRenderer.mainRenderTarget() - //? } else { - /*val target = client.mainRenderTarget - *///? } + /*val target = client.gameRenderer.mainRenderTarget() + *///? } else { + val target = client.mainRenderTarget + //? } val (brt, colorFmt) = svc.makeOffscreenBRT(target, w, h) glBrt = brt glSurface = Surface.makeFromBackendRenderTarget( diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/opengl/StoredGLState.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/opengl/StoredGLState.kt index 94b5322f5..5ea320679 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/opengl/StoredGLState.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/opengl/StoredGLState.kt @@ -126,10 +126,10 @@ class StoredGLState(private val glVersion: Int) { // and MC will skip the GL call on the next draw (e.g. item culling) until a full device // reset such as a window resize. Toggle through GlStateManager to force cache + GL sync. //? if >= 26.2 { - forceToggle(lastEnableBlend, { GlStateManager._enableBlend(0) }, { GlStateManager._disableBlend(0) }) - //?} else { - /*forceToggle(lastEnableBlend, GlStateManager::_enableBlend, GlStateManager::_disableBlend) - *///?} + /*forceToggle(lastEnableBlend, { GlStateManager._enableBlend(0) }, { GlStateManager._disableBlend(0) }) + *///?} else { + forceToggle(lastEnableBlend, GlStateManager::_enableBlend, GlStateManager::_disableBlend) + //?} forceToggle(lastEnableCullFace, GlStateManager::_enableCull, GlStateManager::_disableCull) forceToggle( lastEnableDepthTest, diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/hud/LegacyHudOffscreen.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/hud/LegacyHudOffscreen.kt index 84affdae6..898875c39 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/hud/LegacyHudOffscreen.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/hud/LegacyHudOffscreen.kt @@ -49,10 +49,10 @@ object LegacyHudOffscreen { destroy() try { //? if >= 26.2 { - val rt = TextureTarget(null, w, h, true, com.mojang.blaze3d.GpuFormat.RGBA8_UNORM) - //? } else { - /*val rt = TextureTarget(null, w, h, true) - *///? } + /*val rt = TextureTarget(null, w, h, true, com.mojang.blaze3d.GpuFormat.RGBA8_UNORM) + *///? } else { + val rt = TextureTarget(null, w, h, true) + //? } target = rt val svc = SkiaCtx.vulkanService ?: return false if (!SkiaCtx.isVulkanMode) { @@ -132,22 +132,22 @@ object LegacyHudOffscreen { val colorTex = rt.colorTexture ?: return val encoder = com.mojang.blaze3d.systems.RenderSystem.getDevice().createCommandEncoder() //? if >= 26.2 { - encoder.clearColorTexture(colorTex, org.joml.Vector4f(0f, 0f, 0f, 0f)) - //? } else { - /*encoder.clearColorTexture(colorTex, 0) - *///? } + /*encoder.clearColorTexture(colorTex, org.joml.Vector4f(0f, 0f, 0f, 0f)) + *///? } else { + encoder.clearColorTexture(colorTex, 0) + //? } val prevState = accessor.`oneconfig$getRenderState`() redirectTarget = rt try { accessor.`oneconfig$setRenderState`(state) //? if >= 26.2 { - guiRenderer.render() - //? } else { - /*val fog = (client.gameRenderer as GameRendererAccessor).`oneconfig$getFogRenderer`() + /*guiRenderer.render() + *///? } else { + val fog = (client.gameRenderer as GameRendererAccessor).`oneconfig$getFogRenderer`() .getBuffer(net.minecraft.client.renderer.fog.FogRenderer.FogMode.NONE) guiRenderer.render(fog) - *///? } + //? } } finally { redirectTarget = null accessor.`oneconfig$setRenderState`(prevState) diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/GLVulkanService.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/GLVulkanService.kt index 4d8484d5c..365a28791 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/GLVulkanService.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/GLVulkanService.kt @@ -27,7 +27,7 @@ object GLVulkanService : VulkanService { width: Int, height: Int, vkImageHandle: Long, vkFormat: Int, vkQueueFamily: Int, ): BackendRenderTarget { - val target = client.gameRenderer.mainRenderTarget() + val target = client.mainRenderTarget //? >= 1.21.5 { val frameBufferId = RenderTargetFbo.getFboId(target) //? } else diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt index d12f12c52..00f0e4bcd 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt @@ -1,7 +1,7 @@ package org.polyfrost.oneconfig.internal.ui.services //? if >= 26.2 { -import com.mojang.blaze3d.GpuFormat +/*import com.mojang.blaze3d.GpuFormat import com.mojang.blaze3d.pipeline.RenderTarget import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.vulkan.VulkanDevice @@ -178,4 +178,4 @@ class NativeVulkanService private constructor( } } } -//? } +*///? } diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/VulkanModVulkanService.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/VulkanModVulkanService.kt index 8768fbdd1..21032b15b 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/VulkanModVulkanService.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/VulkanModVulkanService.kt @@ -1,7 +1,7 @@ package org.polyfrost.oneconfig.internal.ui.services //? vulkanmod { -/*import com.mojang.blaze3d.pipeline.RenderTarget +import com.mojang.blaze3d.pipeline.RenderTarget import net.vulkanmod.gl.VkGlTexture import net.vulkanmod.vulkan.Renderer import net.vulkanmod.vulkan.device.DeviceManager @@ -240,4 +240,4 @@ class VulkanModVulkanService private constructor( } } } -*///? } +//? } diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/utils/v1/dsl/screens.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/utils/v1/dsl/screens.kt index ec868f7ea..18715caf1 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/utils/v1/dsl/screens.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/utils/v1/dsl/screens.kt @@ -86,11 +86,11 @@ fun Config.openUI(initialCategory: String) = Platform.screen().display(createScr fun Config.addDefaultCommand(command: String = this.title.lowercase()): LiteralArgumentBuilder { return CommandManager.literal(command).executes { ctx -> //? if >= 26.2 { - Minecraft.getInstance().gui.setScreen(this.createScreen()) - //?} else { - /*Minecraft.getInstance().screen?.onClose() + /*Minecraft.getInstance().gui.setScreen(this.createScreen()) + *///?} else { + Minecraft.getInstance().screen?.onClose() Minecraft.getInstance().screen = this.createScreen() - *///?} + //?} 1 } } diff --git a/minecraft/stonecutter.gradle.kts b/minecraft/stonecutter.gradle.kts index 8e83f2426..ed2e28907 100644 --- a/minecraft/stonecutter.gradle.kts +++ b/minecraft/stonecutter.gradle.kts @@ -2,7 +2,7 @@ plugins { id("dev.kikugie.stonecutter") } -stonecutter active "26.2-fabric" +stonecutter active "26.1-fabric" stonecutter { parameters { constants { From 68c9ef7a719f264d5a49c39d87709bbaa035b713 Mon Sep 17 00:00:00 2001 From: awruff Date: Thu, 23 Jul 2026 00:04:13 -0400 Subject: [PATCH 4/5] fix: performance (maybe) --- .../oneconfig/internal/ui/compose/SkiaCtx.kt | 15 +++++++++++++-- .../ui/services/NativeVulkanService.kt | 18 +++++++++++++----- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt index 831c143ea..70f1f0f57 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt @@ -70,6 +70,9 @@ object SkiaCtx { private var composeSurface: Surface? = null private var composeBrt: BackendRenderTarget? = null + private var hudNeedsSamplingTransition = false + private var composeNeedsSamplingTransition = false + @Volatile private var composeActive = false @Volatile @@ -231,6 +234,7 @@ object SkiaCtx { queuedHudDraws.clear() if (draws.isEmpty()) return flushToTarget(draws, resolveHudSurface() ?: return) + hudNeedsSamplingTransition = true } @Volatile @@ -264,6 +268,7 @@ object SkiaCtx { queuedDraws.clear() val draws = queued + { block.run() } flushToTarget(draws, resolveComposeSurface() ?: return) + composeNeedsSamplingTransition = true blitCompose(ctx) } @@ -328,7 +333,10 @@ object SkiaCtx { wrapper.setGpuTexture(colorTex) //? >= 1.21.8 { wrapper.setGpuTextureView(rt.getColorTextureView()) - vulkanService?.transitionOffscreenForSampling(rt) + if (hudNeedsSamplingTransition) { + vulkanService?.transitionOffscreenForSampling(rt) + hudNeedsSamplingTransition = false + } guiGraphics.pose().pushMatrix() guiGraphics.pose().scale(1f / guiScale, 1f / guiScale) guiGraphics.blit(net.minecraft.client.renderer.RenderPipelines.GUI_TEXTURED, HUD_TEXTURE_LOC, 0, 0, 0f, 0f, w, h, w, h) @@ -378,7 +386,10 @@ object SkiaCtx { wrapper.setGpuTexture(colorTex) //? >= 1.21.8 { wrapper.setGpuTextureView(rt.getColorTextureView()) - vulkanService?.transitionOffscreenForSampling(rt) + if (composeNeedsSamplingTransition) { + vulkanService?.transitionOffscreenForSampling(rt) + composeNeedsSamplingTransition = false + } guiGraphics.pose().pushMatrix() guiGraphics.pose().scale(1f / guiScale, 1f / guiScale) guiGraphics.blit(net.minecraft.client.renderer.RenderPipelines.GUI_TEXTURED, COMPOSE_TEXTURE_LOC, 0, 0, 0f, 0f, w, h, w, h) diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt index 00f0e4bcd..c1f04c32a 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt @@ -91,11 +91,19 @@ class NativeVulkanService private constructor( } override fun restoreMainRTLayout() { - restoreToGeneral(Minecraft.getInstance().gameRenderer.mainRenderTarget().colorTexture as? VulkanGpuTexture) + restoreToGeneral( + Minecraft.getInstance().gameRenderer.mainRenderTarget().colorTexture as? VulkanGpuTexture, + dstStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + dstAccessMask = VK_ACCESS_MEMORY_READ_BIT or VK_ACCESS_MEMORY_WRITE_BIT, + ) } override fun transitionOffscreenForSampling(target: RenderTarget) { - restoreToGeneral(target.colorTexture as? VulkanGpuTexture) + restoreToGeneral( + target.colorTexture as? VulkanGpuTexture, + dstStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, + dstAccessMask = VK_ACCESS_SHADER_READ_BIT, + ) } override fun midFrameFlush() { @@ -103,7 +111,7 @@ class NativeVulkanService private constructor( RenderSystem.getDevice().createCommandEncoder().submit() } - private fun restoreToGeneral(tex: VulkanGpuTexture?) { + private fun restoreToGeneral(tex: VulkanGpuTexture?, dstStageMask: Int, dstAccessMask: Int) { if (tex == null) return try { val device = (RenderSystem.getDevice() as? GpuDeviceAccessor)?.`oneconfig$getBackend`() as? VulkanDevice ?: return @@ -116,7 +124,7 @@ class NativeVulkanService private constructor( .oldLayout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) .newLayout(VK_IMAGE_LAYOUT_GENERAL) .srcAccessMask(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT) - .dstAccessMask(VK_ACCESS_MEMORY_READ_BIT or VK_ACCESS_MEMORY_WRITE_BIT) + .dstAccessMask(dstAccessMask) .srcQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) .dstQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) .image(tex.vkImage()) @@ -124,7 +132,7 @@ class NativeVulkanService private constructor( .aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) .baseMipLevel(0).levelCount(1).baseArrayLayer(0).layerCount(1) vkCmdPipelineBarrier( - cmd, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, + cmd, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, dstStageMask, 0, null, null, barrier, ) } From 9c554c1b4b353e177e989203e2e6b90817313030 Mon Sep 17 00:00:00 2001 From: awruff Date: Thu, 23 Jul 2026 11:46:33 -0400 Subject: [PATCH 5/5] fix: reuse offscreen Vulkan targets by transitioning layouts instead of rewrapping --- .../oneconfig/internal/ui/compose/SkiaCtx.kt | 21 +++++++--- .../ui/services/NativeVulkanService.kt | 41 +++++++++++++++---- .../internal/ui/services/VulkanService.kt | 2 + 3 files changed, 50 insertions(+), 14 deletions(-) diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt index 70f1f0f57..370444c19 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/compose/SkiaCtx.kt @@ -73,6 +73,9 @@ object SkiaCtx { private var hudNeedsSamplingTransition = false private var composeNeedsSamplingTransition = false + private var hudRealIsGeneral = false + private var composeRealIsGeneral = false + @Volatile private var composeActive = false @Volatile @@ -233,7 +236,9 @@ object SkiaCtx { val draws = queuedHudDraws.toList() queuedHudDraws.clear() if (draws.isEmpty()) return - flushToTarget(draws, resolveHudSurface() ?: return) + val surface = resolveHudSurface() ?: return + if (hudRealIsGeneral) hudTarget?.let { vulkanService?.transitionOffscreenForRendering(it) } + flushToTarget(draws, surface) hudNeedsSamplingTransition = true } @@ -267,7 +272,9 @@ object SkiaCtx { val queued = queuedDraws.toList() queuedDraws.clear() val draws = queued + { block.run() } - flushToTarget(draws, resolveComposeSurface() ?: return) + val surface = resolveComposeSurface() ?: return + if (composeRealIsGeneral) composeTarget?.let { vulkanService?.transitionOffscreenForRendering(it) } + flushToTarget(draws, surface) composeNeedsSamplingTransition = true blitCompose(ctx) } @@ -336,6 +343,7 @@ object SkiaCtx { if (hudNeedsSamplingTransition) { vulkanService?.transitionOffscreenForSampling(rt) hudNeedsSamplingTransition = false + hudRealIsGeneral = true } guiGraphics.pose().pushMatrix() guiGraphics.pose().scale(1f / guiScale, 1f / guiScale) @@ -389,6 +397,7 @@ object SkiaCtx { if (composeNeedsSamplingTransition) { vulkanService?.transitionOffscreenForSampling(rt) composeNeedsSamplingTransition = false + composeRealIsGeneral = true } guiGraphics.pose().pushMatrix() guiGraphics.pose().scale(1f / guiScale, 1f / guiScale) @@ -587,10 +596,10 @@ object SkiaCtx { //? } } - val rewrap = vulkanService?.offscreenNeedsPerFrameRewrap == true - if (needNewTarget || rewrap || hudSurface == null) { + if (needNewTarget || hudSurface == null) { hudSurface?.close(); hudSurface = null hudBrt?.close(); hudBrt = null + hudRealIsGeneral = false val svc = vulkanService ?: return null val (brt, colorFmt) = svc.makeOffscreenBRT(rt, w, h) hudBrt = brt @@ -649,10 +658,10 @@ object SkiaCtx { //? } } - val rewrap = vulkanService?.offscreenNeedsPerFrameRewrap == true - if (needNewTarget || rewrap || composeSurface == null) { + if (needNewTarget || composeSurface == null) { composeSurface?.close(); composeSurface = null composeBrt?.close(); composeBrt = null + composeRealIsGeneral = false val svc = vulkanService ?: return null val (brt, colorFmt) = svc.makeOffscreenBRT(rt!!, w, h) composeBrt = brt diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt index c1f04c32a..48144d0b1 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/NativeVulkanService.kt @@ -91,27 +91,52 @@ class NativeVulkanService private constructor( } override fun restoreMainRTLayout() { - restoreToGeneral( + transitionImage( Minecraft.getInstance().gameRenderer.mainRenderTarget().colorTexture as? VulkanGpuTexture, + oldLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + newLayout = VK_IMAGE_LAYOUT_GENERAL, + srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, dstStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, dstAccessMask = VK_ACCESS_MEMORY_READ_BIT or VK_ACCESS_MEMORY_WRITE_BIT, ) } override fun transitionOffscreenForSampling(target: RenderTarget) { - restoreToGeneral( + transitionImage( target.colorTexture as? VulkanGpuTexture, + oldLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + newLayout = VK_IMAGE_LAYOUT_GENERAL, + srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, dstStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, + srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, dstAccessMask = VK_ACCESS_SHADER_READ_BIT, ) } + override fun transitionOffscreenForRendering(target: RenderTarget) { + transitionImage( + target.colorTexture as? VulkanGpuTexture, + oldLayout = VK_IMAGE_LAYOUT_GENERAL, + newLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + srcStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, + dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, + srcAccessMask = VK_ACCESS_SHADER_READ_BIT, + dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT or VK_ACCESS_COLOR_ATTACHMENT_READ_BIT, + ) + } + override fun midFrameFlush() { // Submit MC's pending command buffer so Skia sees a consistent image state. RenderSystem.getDevice().createCommandEncoder().submit() } - private fun restoreToGeneral(tex: VulkanGpuTexture?, dstStageMask: Int, dstAccessMask: Int) { + private fun transitionImage( + tex: VulkanGpuTexture?, + oldLayout: Int, newLayout: Int, + srcStageMask: Int, dstStageMask: Int, + srcAccessMask: Int, dstAccessMask: Int, + ) { if (tex == null) return try { val device = (RenderSystem.getDevice() as? GpuDeviceAccessor)?.`oneconfig$getBackend`() as? VulkanDevice ?: return @@ -121,9 +146,9 @@ class NativeVulkanService private constructor( MemoryStack.stackPush().use { stack -> val barrier = VkImageMemoryBarrier.calloc(1, stack) .sType(VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER) - .oldLayout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) - .newLayout(VK_IMAGE_LAYOUT_GENERAL) - .srcAccessMask(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT) + .oldLayout(oldLayout) + .newLayout(newLayout) + .srcAccessMask(srcAccessMask) .dstAccessMask(dstAccessMask) .srcQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) .dstQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) @@ -132,7 +157,7 @@ class NativeVulkanService private constructor( .aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) .baseMipLevel(0).levelCount(1).baseArrayLayer(0).layerCount(1) vkCmdPipelineBarrier( - cmd, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, dstStageMask, 0, + cmd, srcStageMask, dstStageMask, 0, null, null, barrier, ) } @@ -141,7 +166,7 @@ class NativeVulkanService private constructor( encoder.execute(cmd) } } catch (e: Exception) { - LOG.warn("restoreToGeneral failed", e) + LOG.warn("transitionImage failed", e) } } diff --git a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/VulkanService.kt b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/VulkanService.kt index 682ab158a..bfcba5343 100644 --- a/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/VulkanService.kt +++ b/minecraft/src/main/kotlin/org/polyfrost/oneconfig/internal/ui/services/VulkanService.kt @@ -22,6 +22,8 @@ interface VulkanService { fun transitionOffscreenForSampling(target: RenderTarget) {} + fun transitionOffscreenForRendering(target: RenderTarget) {} + fun restoreMainRTLayout() {} fun makeDirectContext(): DirectContext