From a815183d3d052d730769b8c119bac4f170a9db65 Mon Sep 17 00:00:00 2001 From: Ciilu <109708109+Ciilu@users.noreply.github.com> Date: Wed, 4 Feb 2026 10:38:19 +0800 Subject: [PATCH 1/7] update --- .../java/org/jackhuang/hmcl/setting/Config.java | 15 +++++++++++++++ .../org/jackhuang/hmcl/ui/main/SettingsPage.java | 8 ++++++++ .../resources/assets/lang/I18N_zh_CN.properties | 1 + 3 files changed, 24 insertions(+) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java index 9d75154153..87b2d70096 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java @@ -659,6 +659,21 @@ public void setDisableAutoGameOptions(boolean disableAutoGameOptions) { this.disableAutoGameOptions.set(disableAutoGameOptions); } + @SerializedName("windowsHighPerformance") + private final BooleanProperty windowsHighPerformance = new SimpleBooleanProperty(false); + + public BooleanProperty windowsHighPerformanceProperty() { + return windowsHighPerformance; + } + + public boolean iswindowsHighPerformance() { + return windowsHighPerformance.get(); + } + + public void setwindowsHighPerformance(boolean windowsHighPerformance) { + this.windowsHighPerformance.set(windowsHighPerformance); + } + // Accounts @SerializedName("authlibInjectorServers") diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java index b01031fd3d..90ce615c3f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java @@ -272,6 +272,14 @@ else if (locale.isSameLanguage(currentLocale)) settingsPane.getContent().add(disableAutoGameOptionsPane); } + { + LineToggleButton windowsHighPerformance = new LineToggleButton(); + windowsHighPerformance.setTitle(i18n("settings.launcher.windows_gpu_preferences")); + windowsHighPerformance.selectedProperty().bindBidirectional(config().windowsHighPerformanceProperty()); + + settingsPane.getContent().add(windowsHighPerformance); + } + { BorderPane debugPane = new BorderPane(); diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index d47299447f..38d457084a 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -1198,6 +1198,7 @@ settings.launcher.brightness.light=浅色模式 settings.launcher.common_path.tooltip=启动器将所有游戏资源及依赖库文件存放于此集中管理。如果游戏文件夹内有现成的将不会使用公共库文件。 settings.launcher.debug=调试 settings.launcher.disable_auto_game_options=不自动切换游戏语言 +settings.launcher.windows_gpu_preferences=[Windows] 自动使用高性能 GPU 启动游戏 settings.launcher.download=下载 settings.launcher.download.threads=线程数 settings.launcher.download.threads.auto=自动选择线程数 From 2156f8e330cbcf4604d4e6c8d334d58d3644225a Mon Sep 17 00:00:00 2001 From: Ciilu <109708109+Ciilu@users.noreply.github.com> Date: Wed, 4 Feb 2026 11:29:53 +0800 Subject: [PATCH 2/7] update --- .../jackhuang/hmcl/game/LauncherHelper.java | 31 ++++++++++ .../org/jackhuang/hmcl/setting/Config.java | 4 +- .../resources/assets/lang/I18N.properties | 1 + .../resources/assets/lang/I18N_zh.properties | 1 + .../hmcl/util/platform/windows/Advapi32.java | 18 ++++++ .../util/platform/windows/WinConstants.java | 4 ++ .../hmcl/util/platform/windows/WinReg.java | 61 +++++++++++++++++++ 7 files changed, 118 insertions(+), 2 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java index 62f435842d..fc5aea23a3 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -47,6 +47,7 @@ import org.jackhuang.hmcl.util.io.FileUtils; import org.jackhuang.hmcl.util.io.ResponseCodeException; import org.jackhuang.hmcl.util.platform.*; +import org.jackhuang.hmcl.util.platform.windows.WinReg; import org.jackhuang.hmcl.util.versioning.GameVersionNumber; import org.jackhuang.hmcl.util.versioning.VersionNumber; @@ -65,6 +66,7 @@ import static javafx.application.Platform.runLater; import static javafx.application.Platform.setImplicitExit; +import static org.jackhuang.hmcl.setting.ConfigHolder.config; import static org.jackhuang.hmcl.ui.FXUtils.runInFX; import static org.jackhuang.hmcl.util.DataSizeUnit.MEGABYTES; import static org.jackhuang.hmcl.util.Lang.resolveException; @@ -84,6 +86,7 @@ public final class LauncherHelper { private boolean showLogs; private QuickPlayOption quickPlayOption; private boolean disableOfflineSkin = false; + private boolean gpuRegAlreadyExistsed = false; public LauncherHelper(Profile profile, Account account, String selectedVersion) { this.profile = Objects.requireNonNull(profile); @@ -207,6 +210,24 @@ private void launch0() { if (quickPlayOption != null) { launchOptionsBuilder.setQuickPlayOption(quickPlayOption); } + if (config().isWindowsHighPerformance()) { + Object current = WinReg.INSTANCE.queryValue( + WinReg.HKEY.HKEY_CURRENT_USER, + "Software\\Microsoft\\DirectX\\UserGpuPreferences", + FileUtils.getAbsolutePath(javaVersionRef.get().getBinary()) + ); + if (current instanceof String) { + gpuRegAlreadyExistsed = true; + } else { + WinReg.INSTANCE.setValue( + WinReg.HKEY.HKEY_CURRENT_USER, + "Software\\Microsoft\\DirectX\\UserGpuPreferences", + FileUtils.getAbsolutePath(javaVersionRef.get().getBinary()), + "GpuPreference=2;" + ); + } + } + LaunchOptions launchOptions = launchOptionsBuilder.create(); LOG.info("Here's the structure of game mod directory:\n" + FileUtils.printFileStructure(repository.getModsDirectory(selectedVersion), 10)); @@ -822,6 +843,16 @@ public void run() { } private void finishLaunch() { + if (!gpuRegAlreadyExistsed && config().isWindowsHighPerformance()) { + try { + Thread.sleep(5000L); + } catch (InterruptedException ignored) {} + WinReg.INSTANCE.deleteValue( + WinReg.HKEY.HKEY_CURRENT_USER, + "Software\\Microsoft\\DirectX\\UserGpuPreferences", + process.getProcess().info().command().orElseThrow() + ); + } switch (launcherVisibility) { case HIDE_AND_REOPEN: runLater(() -> { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java index 87b2d70096..86b8f8b762 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java @@ -666,11 +666,11 @@ public BooleanProperty windowsHighPerformanceProperty() { return windowsHighPerformance; } - public boolean iswindowsHighPerformance() { + public boolean isWindowsHighPerformance() { return windowsHighPerformance.get(); } - public void setwindowsHighPerformance(boolean windowsHighPerformance) { + public void setWindowsHighPerformance(boolean windowsHighPerformance) { this.windowsHighPerformance.set(windowsHighPerformance); } diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 579fdfe5ea..62029c553b 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -1413,6 +1413,7 @@ settings.launcher.brightness.light=Light Mode settings.launcher.common_path.tooltip=HMCL will put all game assets and dependencies here. If there are existing libraries in the game directory, then HMCL will prefer to use them first. settings.launcher.debug=Debug settings.launcher.disable_auto_game_options=Do not switch game language +settings.launcher.windows_gpu_preferences=[Windows] Automatically launch games using the high-performance GPU settings.launcher.download=Download settings.launcher.download.threads=Threads settings.launcher.download.threads.auto=Automatically Determine diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index c1166f1b4d..77dd14e6f5 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -1193,6 +1193,7 @@ settings.launcher.brightness.light=淺色模式 settings.launcher.common_path.tooltip=啟動器將所有遊戲資源及相依元件庫檔案放於此集中管理。如果遊戲目錄內有現成的將不會使用公共庫檔案。 settings.launcher.debug=除錯 settings.launcher.disable_auto_game_options=不自動切換遊戲語言 +settings.launcher.windows_gpu_preferences=[Windows] 自動使用高效能 GPU 啟動遊戲 settings.launcher.download=下載 settings.launcher.download.threads=執行緒數 settings.launcher.download.threads.auto=自動選取執行緒數 diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/Advapi32.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/Advapi32.java index 274826cd69..fe463e639b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/Advapi32.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/Advapi32.java @@ -56,4 +56,22 @@ int RegEnumKeyExW(Pointer hKey, int dwIndex, IntByReference lpReserved, Pointer lpClass, IntByReference lpcchClass, Pointer lpftLastWriteTime); + + /** + * @see RegCreateKeyExW function + */ + int RegCreateKeyExW(Pointer hKey, WString lpSubKey, int Reserved, WString lpClass, + int dwOptions, int samDesired, Pointer lpSecurityAttributes, + PointerByReference phkResult, IntByReference lpdwDisposition); + + /** + * @see RegSetValueExW function + */ + int RegSetValueExW(Pointer hKey, WString lpValueName, int Reserved, int dwType, + Pointer lpData, int cbData); + + /** + * @see RegDeleteValueW function + */ + int RegDeleteValueW(Pointer hKey, WString lpValueName); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/WinConstants.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/WinConstants.java index 01888d0308..d080830ed3 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/WinConstants.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/WinConstants.java @@ -53,6 +53,8 @@ public interface WinConstants { // https://learn.microsoft.com/windows/win32/sysinfo/registry-key-security-and-access-rights int KEY_QUERY_VALUE = 0x0001; int KEY_ENUMERATE_SUB_KEYS = 0x0008; + int KEY_WRITE = 0x20006; + int KEY_SET_VALUE = 0x0002; int KEY_READ = 0x20019; // https://learn.microsoft.com/windows/win32/sysinfo/registry-value-types @@ -100,4 +102,6 @@ public interface WinConstants { // https://learn.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute int DWMWA_USE_IMMERSIVE_DARK_MODE = 20; + // https://learn.microsoft.com/windows/win32/api/winreg/nf-winreg-regcreatekeyexw + int REG_OPTION_NON_VOLATILE = 0x0000; } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/WinReg.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/WinReg.java index 0067160500..5c4d56d3c1 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/WinReg.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/WinReg.java @@ -88,6 +88,10 @@ public List querySubKeys(HKEY root, String key) { return list; } + public abstract boolean setValue(HKEY root, String key, String valueName, String value); + + public abstract boolean deleteValue(HKEY root, String key, String valueName); + private static final class JNAWinReg extends WinReg { private final Advapi32 advapi32; @@ -245,6 +249,63 @@ public List querySubKeyNames(HKEY root, String key) { return Collections.emptyList(); } + + @Override + public boolean setValue(HKEY root, String key, String valueName, String value) { + PointerByReference phkKey = new PointerByReference(); + int status = advapi32.RegCreateKeyExW( + root.toPointer(), + new WString(key), + 0, + null, + WinConstants.REG_OPTION_NON_VOLATILE, + WinConstants.KEY_WRITE, + null, + phkKey, + null + ); + + if (status != WinConstants.ERROR_SUCCESS) { + return false; + } + + Pointer hkey = phkKey.getValue(); + try { + byte[] data = (value + "\0").getBytes(StandardCharsets.UTF_16LE); + try (Memory mem = new Memory(data.length)) { + mem.write(0, data, 0, data.length); + status = advapi32.RegSetValueExW( + hkey, + new WString(valueName), + 0, + WinConstants.REG_SZ, + mem, + data.length + ); + } + return status == WinConstants.ERROR_SUCCESS; + } finally { + advapi32.RegCloseKey(hkey); + } + } + + @Override + public boolean deleteValue(HKEY root, String key, String valueName) { + PointerByReference phkKey = new PointerByReference(); + int status = advapi32.RegOpenKeyExW(root.toPointer(), new WString(key), 0, WinConstants.KEY_SET_VALUE, phkKey); + + if (status != WinConstants.ERROR_SUCCESS) { + return false; + } + + Pointer hkey = phkKey.getValue(); + try { + status = advapi32.RegDeleteValueW(hkey, new WString(valueName)); + return status == WinConstants.ERROR_SUCCESS; + } finally { + advapi32.RegCloseKey(hkey); + } + } } } From 4cc086c95f78bdb1e78565f8c9a6599afd033967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=9E=E5=BA=90?= <109708109+Ciilu@users.noreply.github.com> Date: Fri, 20 Feb 2026 22:17:41 +0800 Subject: [PATCH 3/7] update --- .../jackhuang/hmcl/game/LauncherHelper.java | 55 +++++++++++-------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java index fc5aea23a3..77c77e7204 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -86,7 +86,7 @@ public final class LauncherHelper { private boolean showLogs; private QuickPlayOption quickPlayOption; private boolean disableOfflineSkin = false; - private boolean gpuRegAlreadyExistsed = false; + private boolean modifyedGpuReg = false; public LauncherHelper(Profile profile, Account account, String selectedVersion) { this.profile = Objects.requireNonNull(profile); @@ -211,20 +211,26 @@ private void launch0() { launchOptionsBuilder.setQuickPlayOption(quickPlayOption); } if (config().isWindowsHighPerformance()) { - Object current = WinReg.INSTANCE.queryValue( - WinReg.HKEY.HKEY_CURRENT_USER, - "Software\\Microsoft\\DirectX\\UserGpuPreferences", - FileUtils.getAbsolutePath(javaVersionRef.get().getBinary()) - ); - if (current instanceof String) { - gpuRegAlreadyExistsed = true; - } else { - WinReg.INSTANCE.setValue( - WinReg.HKEY.HKEY_CURRENT_USER, - "Software\\Microsoft\\DirectX\\UserGpuPreferences", - FileUtils.getAbsolutePath(javaVersionRef.get().getBinary()), - "GpuPreference=2;" - ); + try { + WinReg reg = WinReg.INSTANCE; + if (reg != null) { + Object current = reg.queryValue( + WinReg.HKEY.HKEY_CURRENT_USER, + "Software\\Microsoft\\DirectX\\UserGpuPreferences", + FileUtils.getAbsolutePath(javaVersionRef.get().getBinary()) + ); + if (!(current instanceof String)) { + reg.setValue( + WinReg.HKEY.HKEY_CURRENT_USER, + "Software\\Microsoft\\DirectX\\UserGpuPreferences", + FileUtils.getAbsolutePath(javaVersionRef.get().getBinary()), + "GpuPreference=2;" + ); + modifyedGpuReg = true; + } + } + } catch (Exception e) { + LOG.warning("Failed to apply high performance GPU preference", e); } } @@ -843,15 +849,20 @@ public void run() { } private void finishLaunch() { - if (!gpuRegAlreadyExistsed && config().isWindowsHighPerformance()) { + if (modifyedGpuReg) { try { Thread.sleep(5000L); - } catch (InterruptedException ignored) {} - WinReg.INSTANCE.deleteValue( - WinReg.HKEY.HKEY_CURRENT_USER, - "Software\\Microsoft\\DirectX\\UserGpuPreferences", - process.getProcess().info().command().orElseThrow() - ); + } catch (InterruptedException ignored) { + } + try { + WinReg.INSTANCE.deleteValue( + WinReg.HKEY.HKEY_CURRENT_USER, + "Software\\Microsoft\\DirectX\\UserGpuPreferences", + process.getProcess().info().command().orElseThrow() + ); + } catch (Exception e) { + LOG.warning("Failed to revert high performance GPU preference", e); + } } switch (launcherVisibility) { case HIDE_AND_REOPEN: From e2528923b37bfcc88600244a5655181cec6b334a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=9E=E5=BA=90?= <109708109+Ciilu@users.noreply.github.com> Date: Fri, 20 Feb 2026 23:17:13 +0800 Subject: [PATCH 4/7] update --- .../main/java/org/jackhuang/hmcl/game/LauncherHelper.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java index 77c77e7204..faeb5e19b0 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -86,7 +86,7 @@ public final class LauncherHelper { private boolean showLogs; private QuickPlayOption quickPlayOption; private boolean disableOfflineSkin = false; - private boolean modifyedGpuReg = false; + private boolean modifiedGpuReg = false; public LauncherHelper(Profile profile, Account account, String selectedVersion) { this.profile = Objects.requireNonNull(profile); @@ -226,7 +226,7 @@ private void launch0() { FileUtils.getAbsolutePath(javaVersionRef.get().getBinary()), "GpuPreference=2;" ); - modifyedGpuReg = true; + modifiedGpuReg = true; } } } catch (Exception e) { @@ -849,7 +849,7 @@ public void run() { } private void finishLaunch() { - if (modifyedGpuReg) { + if (modifiedGpuReg) { try { Thread.sleep(5000L); } catch (InterruptedException ignored) { From 6656050cfd93818f2e86a4c3f56b481954515f97 Mon Sep 17 00:00:00 2001 From: Glavo Date: Fri, 27 Mar 2026 21:10:16 +0800 Subject: [PATCH 5/7] Unify GPU preference setting key across languages. --- HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java | 2 +- HMCL/src/main/resources/assets/lang/I18N.properties | 2 +- HMCL/src/main/resources/assets/lang/I18N_zh.properties | 2 +- HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java index 77853d8cdc..a3d06d04d9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java @@ -291,7 +291,7 @@ else if (locale.isSameLanguage(currentLocale)) { LineToggleButton windowsHighPerformance = new LineToggleButton(); - windowsHighPerformance.setTitle(i18n("settings.launcher.windows_gpu_preferences")); + windowsHighPerformance.setTitle(i18n("settings.launcher.gpu_preferences")); windowsHighPerformance.selectedProperty().bindBidirectional(config().windowsHighPerformanceProperty()); settingsPane.getContent().add(windowsHighPerformance); diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 186ab1e923..3fa2fcac2f 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -1426,7 +1426,6 @@ settings.launcher.common_path.tooltip=HMCL will put all game assets and dependen settings.launcher.debug=Debug settings.launcher.disable_april_fools=Do not enable April Fools features settings.launcher.disable_auto_game_options=Do not switch game language -settings.launcher.windows_gpu_preferences=[Windows] Automatically launch games using the high-performance GPU settings.launcher.download=Download settings.launcher.download.threads=Threads settings.launcher.download.threads.auto=Automatically Determine @@ -1440,6 +1439,7 @@ settings.launcher.font.anti_aliasing.auto=Auto settings.launcher.font.anti_aliasing.gray=Grayscale settings.launcher.font.anti_aliasing.lcd=Sub-pixel settings.launcher.general=General +settings.launcher.gpu_preferences=Automatically launch games using the high-performance GPU settings.launcher.language=Language settings.launcher.launcher_log.export=Export Launcher Logs settings.launcher.launcher_log.export.failed=Failed to export logs. diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index 5c2ad10b00..54b9ca2d4d 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -1211,7 +1211,6 @@ settings.launcher.common_path.tooltip=啟動器將所有遊戲資源及相依元 settings.launcher.debug=除錯 settings.launcher.disable_april_fools=不啟用愚人節功能 settings.launcher.disable_auto_game_options=不自動切換遊戲語言 -settings.launcher.windows_gpu_preferences=[Windows] 自動使用高效能 GPU 啟動遊戲 settings.launcher.download=下載 settings.launcher.download.threads=執行緒數 settings.launcher.download.threads.auto=自動選取執行緒數 @@ -1225,6 +1224,7 @@ settings.launcher.font.anti_aliasing.auto=自動 settings.launcher.font.anti_aliasing.gray=灰階 settings.launcher.font.anti_aliasing.lcd=子像素 settings.launcher.general=一般 +settings.launcher.gpu_preferences=自動使用高效能 GPU 啟動遊戲 settings.launcher.language=語言 settings.launcher.launcher_log.export=匯出啟動器日誌 settings.launcher.launcher_log.export.failed=無法匯出日誌。 diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index 3ea46f9f1c..6e58f1d6ef 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -1216,7 +1216,6 @@ settings.launcher.common_path.tooltip=启动器将所有游戏资源及依赖库 settings.launcher.debug=调试 settings.launcher.disable_april_fools=不启用愚人节功能 settings.launcher.disable_auto_game_options=不自动切换游戏语言 -settings.launcher.windows_gpu_preferences=[Windows] 自动使用高性能 GPU 启动游戏 settings.launcher.download=下载 settings.launcher.download.threads=线程数 settings.launcher.download.threads.auto=自动选择线程数 @@ -1230,6 +1229,7 @@ settings.launcher.font.anti_aliasing.auto=自动 settings.launcher.font.anti_aliasing.gray=灰度 settings.launcher.font.anti_aliasing.lcd=子像素 settings.launcher.general=通用 +settings.launcher.gpu_preferences=自动使用高性能 GPU 启动游戏 settings.launcher.language=语言 settings.launcher.launcher_log.export=导出启动器日志 settings.launcher.launcher_log.export.failed=无法导出日志 From 590149fcc8c633da951d2408ddcd6dc8fbc6f47f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=9E=E5=BA=90?= <109708109+CiiLu@users.noreply.github.com> Date: Sat, 4 Apr 2026 12:33:30 +0800 Subject: [PATCH 6/7] Apply suggestions from code review Co-authored-by: 3gf8jv4dv <3gf8jv4dv@gmail.com> --- HMCL/src/main/resources/assets/lang/I18N.properties | 2 +- HMCL/src/main/resources/assets/lang/I18N_zh.properties | 2 +- HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 3fa2fcac2f..ad44109f90 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -1439,7 +1439,7 @@ settings.launcher.font.anti_aliasing.auto=Auto settings.launcher.font.anti_aliasing.gray=Grayscale settings.launcher.font.anti_aliasing.lcd=Sub-pixel settings.launcher.general=General -settings.launcher.gpu_preferences=Automatically launch games using the high-performance GPU +settings.launcher.gpu_preferences=Launch games with high-performance GPU settings.launcher.language=Language settings.launcher.launcher_log.export=Export Launcher Logs settings.launcher.launcher_log.export.failed=Failed to export logs. diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index 54b9ca2d4d..d6eb8b62f2 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -1224,7 +1224,7 @@ settings.launcher.font.anti_aliasing.auto=自動 settings.launcher.font.anti_aliasing.gray=灰階 settings.launcher.font.anti_aliasing.lcd=子像素 settings.launcher.general=一般 -settings.launcher.gpu_preferences=自動使用高效能 GPU 啟動遊戲 +settings.launcher.gpu_preferences=使用高效能 GPU 啟動遊戲 settings.launcher.language=語言 settings.launcher.launcher_log.export=匯出啟動器日誌 settings.launcher.launcher_log.export.failed=無法匯出日誌。 diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index 6e58f1d6ef..a352568332 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -1229,7 +1229,7 @@ settings.launcher.font.anti_aliasing.auto=自动 settings.launcher.font.anti_aliasing.gray=灰度 settings.launcher.font.anti_aliasing.lcd=子像素 settings.launcher.general=通用 -settings.launcher.gpu_preferences=自动使用高性能 GPU 启动游戏 +settings.launcher.gpu_preferences=使用高性能 GPU 启动游戏 settings.launcher.language=语言 settings.launcher.launcher_log.export=导出启动器日志 settings.launcher.launcher_log.export.failed=无法导出日志 From 7029921067f80c5ef41dc84a874c6016487c3537 Mon Sep 17 00:00:00 2001 From: CiiLu <109708109+CiiLu@users.noreply.github.com> Date: Sat, 25 Apr 2026 22:04:23 +0800 Subject: [PATCH 7/7] update --- HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java | 3 ++- .../src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java | 1 + HMCL/src/main/resources/assets/lang/I18N.properties | 1 + HMCL/src/main/resources/assets/lang/I18N_zh.properties | 1 + HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties | 1 + 5 files changed, 6 insertions(+), 1 deletion(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java index 574e053d2e..cc713ef9e5 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java @@ -717,7 +717,8 @@ public boolean isWindowsHighPerformance() { public void setWindowsHighPerformance(boolean windowsHighPerformance) { this.windowsHighPerformance.set(windowsHighPerformance); - + } + @SerializedName("allowAutoAgent") private final BooleanProperty allowAutoAgent = new SimpleBooleanProperty(false); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java index 6687ed2585..a849e9fa12 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java @@ -263,6 +263,7 @@ else if (locale.isSameLanguage(currentLocale)) { LineToggleButton windowsHighPerformance = new LineToggleButton(); windowsHighPerformance.setTitle(i18n("settings.launcher.gpu_preferences")); + windowsHighPerformance.setSubtitle(i18n("settings.advanced.windows_only")); windowsHighPerformance.selectedProperty().bindBidirectional(config().windowsHighPerformanceProperty()); settingsPane.getContent().add(windowsHighPerformance); diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 280210ddda..56b91fa60d 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -1429,6 +1429,7 @@ settings.advanced.unsupported_system_options=Settings not applicable to the curr settings.advanced.use_native_glfw=Use System GLFW settings.advanced.use_native_openal=Use System OpenAL settings.advanced.linux_freebsd_only=Linux/FreeBSD Only +settings.advanced.windows_only=Windows Only settings.advanced.workaround=Workaround settings.advanced.workaround.warning=Workaround options are intended only for advanced users. Tweaking with these options may crash the game. Unless you know what you are doing, please do not edit these options. settings.advanced.wrapper_launcher=Wrapper Command diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index d18f7ce5bb..73036ac3e8 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -1220,6 +1220,7 @@ settings.advanced.unsupported_system_options=不適用於目前系統的選項 settings.advanced.use_native_glfw=使用系統 GLFW settings.advanced.use_native_openal=使用系統 OpenAL settings.advanced.linux_freebsd_only=僅限 Linux/FreeBSD +settings.advanced.windows_only=僅限 Windows settings.advanced.workaround=除錯選項 settings.advanced.workaround.warning=除錯選項僅提供給專業玩家使用。修改除錯選項可能會導致遊戲無法啟動。除非你知道你在做什麼,否則請不要修改這些選項。 settings.advanced.wrapper_launcher=前置指令 diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index 38c4f4a0d9..1fcf5a079c 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -1225,6 +1225,7 @@ settings.advanced.unsupported_system_options=不适用于当前系统的选项 settings.advanced.use_native_glfw=使用系统 GLFW settings.advanced.use_native_openal=使用系统 OpenAL settings.advanced.linux_freebsd_only=仅 Linux/FreeBSD +settings.advanced.windows_only=仅 Windows settings.advanced.workaround=调试选项 settings.advanced.workaround.warning=调试选项仅提供给专业玩家使用。调试选项可能会导致游戏无法启动。除非你知道你在做什么,否则请不要修改这些选项! settings.advanced.wrapper_launcher=包装命令