From 4445021d66fe5b4b63546d86a95674633922a21b Mon Sep 17 00:00:00 2001 From: Glavo Date: Thu, 14 Aug 2025 23:07:23 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20#4061:=20=E5=9C=A8=20Windows=207/8/8.1=20?= =?UTF-8?q?=E4=B8=8A=E4=BD=BF=E7=94=A8=20llvmpipe-loader=20=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=20mesa=20(#4224)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jackhuang/hmcl/game/LauncherHelper.java | 6 ++++-- .../jackhuang/hmcl/util/NativePatcher.java | 19 +++++++++++++++++-- HMCL/src/main/resources/assets/natives.json | 11 +++++++++++ 3 files changed, 32 insertions(+), 4 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 2d6e9be2d..6a26ea193 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -160,8 +160,10 @@ public final class LauncherHelper { }), Task.composeAsync(() -> { Renderer renderer = setting.getRenderer(); - if (renderer != Renderer.DEFAULT && OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) { - Library lib = NativePatcher.getMesaLoader(java); + if (renderer != Renderer.DEFAULT + && OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS + && OperatingSystem.WINDOWS_VERSION != null) { + Library lib = NativePatcher.getWindowsMesaLoader(java, renderer, OperatingSystem.WINDOWS_VERSION); if (lib == null) return null; File file = dependencyManager.getGameRepository().getLibraryFile(version.get(), lib); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/NativePatcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/NativePatcher.java index 4d33d52fd..7e1c8d694 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/NativePatcher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/NativePatcher.java @@ -26,7 +26,10 @@ import org.jackhuang.hmcl.util.platform.Architecture; import org.jackhuang.hmcl.java.JavaRuntime; import org.jackhuang.hmcl.util.platform.OperatingSystem; import org.jackhuang.hmcl.util.platform.Platform; +import org.jackhuang.hmcl.util.platform.windows.WindowsVersion; import org.jackhuang.hmcl.util.versioning.GameVersionNumber; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.IOException; import java.io.InputStreamReader; @@ -178,7 +181,19 @@ public final class NativePatcher { return version.setLibraries(newLibraries); } - public static Library getMesaLoader(JavaRuntime javaVersion) { - return getNatives(javaVersion.getPlatform()).get("mesa-loader"); + public static @Nullable Library getWindowsMesaLoader(@NotNull JavaRuntime javaVersion, @NotNull Renderer renderer, @NotNull WindowsVersion windowsVersion) { + if (renderer == Renderer.DEFAULT) + return null; + + if (windowsVersion.compareTo(WindowsVersion.WINDOWS_10) >= 0) { + return getNatives(javaVersion.getPlatform()).get("mesa-loader"); + } else if (windowsVersion.compareTo(WindowsVersion.WINDOWS_7) >= 0) { + if (renderer == Renderer.LLVMPIPE) + return getNatives(javaVersion.getPlatform()).get("software-renderer-loader"); + else + return null; + } else { + return null; + } } } diff --git a/HMCL/src/main/resources/assets/natives.json b/HMCL/src/main/resources/assets/natives.json index 39a12bf93..77e343569 100644 --- a/HMCL/src/main/resources/assets/natives.json +++ b/HMCL/src/main/resources/assets/natives.json @@ -4007,6 +4007,17 @@ "size": 27971214 } } + }, + "software-renderer-loader": { + "name": "org.glavo:llvmpipe-loader:1.0", + "downloads": { + "artifact": { + "path": "org/glavo/llvmpipe-loader/1.0/llvmpipe-loader-1.0.jar", + "url": "https://repo1.maven.org/maven2/org/glavo/llvmpipe-loader/1.0/llvmpipe-loader-1.0.jar", + "sha1": "ff255415e5c4b2a18970da0a8e552b557ca013ae", + "size": 12964773 + } + } } }, "windows-x86": {