Skip to content

Commit e13b838

Browse files
authored
[release/3.6] 在 Windows 7/8/8.1 上使用 llvmpipe-loader 加载 mesa (#4430)
#4224
1 parent a6e4651 commit e13b838

3 files changed

Lines changed: 32 additions & 4 deletions

File tree

HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,10 @@ private void launch0() {
160160
}),
161161
Task.composeAsync(() -> {
162162
Renderer renderer = setting.getRenderer();
163-
if (renderer != Renderer.DEFAULT && OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) {
164-
Library lib = NativePatcher.getMesaLoader(java);
163+
if (renderer != Renderer.DEFAULT
164+
&& OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS
165+
&& OperatingSystem.WINDOWS_VERSION != null) {
166+
Library lib = NativePatcher.getWindowsMesaLoader(java, renderer, OperatingSystem.WINDOWS_VERSION);
165167
if (lib == null)
166168
return null;
167169
File file = dependencyManager.getGameRepository().getLibraryFile(version.get(), lib);

HMCL/src/main/java/org/jackhuang/hmcl/util/NativePatcher.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@
2626
import org.jackhuang.hmcl.java.JavaRuntime;
2727
import org.jackhuang.hmcl.util.platform.OperatingSystem;
2828
import org.jackhuang.hmcl.util.platform.Platform;
29+
import org.jackhuang.hmcl.util.platform.windows.WindowsVersion;
2930
import org.jackhuang.hmcl.util.versioning.GameVersionNumber;
31+
import org.jetbrains.annotations.NotNull;
32+
import org.jetbrains.annotations.Nullable;
3033

3134
import java.io.IOException;
3235
import java.io.InputStreamReader;
@@ -178,7 +181,19 @@ public static Version patchNative(DefaultGameRepository repository,
178181
return version.setLibraries(newLibraries);
179182
}
180183

181-
public static Library getMesaLoader(JavaRuntime javaVersion) {
182-
return getNatives(javaVersion.getPlatform()).get("mesa-loader");
184+
public static @Nullable Library getWindowsMesaLoader(@NotNull JavaRuntime javaVersion, @NotNull Renderer renderer, @NotNull WindowsVersion windowsVersion) {
185+
if (renderer == Renderer.DEFAULT)
186+
return null;
187+
188+
if (windowsVersion.compareTo(WindowsVersion.WINDOWS_10) >= 0) {
189+
return getNatives(javaVersion.getPlatform()).get("mesa-loader");
190+
} else if (windowsVersion.compareTo(WindowsVersion.WINDOWS_7) >= 0) {
191+
if (renderer == Renderer.LLVMPIPE)
192+
return getNatives(javaVersion.getPlatform()).get("software-renderer-loader");
193+
else
194+
return null;
195+
} else {
196+
return null;
197+
}
183198
}
184199
}

HMCL/src/main/resources/assets/natives.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4007,6 +4007,17 @@
40074007
"size": 27971214
40084008
}
40094009
}
4010+
},
4011+
"software-renderer-loader": {
4012+
"name": "org.glavo:llvmpipe-loader:1.0",
4013+
"downloads": {
4014+
"artifact": {
4015+
"path": "org/glavo/llvmpipe-loader/1.0/llvmpipe-loader-1.0.jar",
4016+
"url": "https://repo1.maven.org/maven2/org/glavo/llvmpipe-loader/1.0/llvmpipe-loader-1.0.jar",
4017+
"sha1": "ff255415e5c4b2a18970da0a8e552b557ca013ae",
4018+
"size": 12964773
4019+
}
4020+
}
40104021
}
40114022
},
40124023
"windows-x86": {

0 commit comments

Comments
 (0)