添加渲染器设置 (#2145)

close #2143
This commit is contained in:
Glavo
2023-02-24 01:32:15 +08:00
committed by GitHub
parent 72a8199453
commit af63c3aa3a
12 changed files with 140 additions and 56 deletions

View File

@@ -59,7 +59,7 @@ public class LaunchOptions implements Serializable {
private NativesDirectoryType nativesDirType;
private String nativesDir;
private ProcessPriority processPriority = ProcessPriority.NORMAL;
private boolean useSoftwareRenderer;
private Renderer renderer = Renderer.DEFAULT;
private boolean useNativeGLFW;
private boolean useNativeOpenAL;
private boolean daemon;
@@ -252,8 +252,8 @@ public class LaunchOptions implements Serializable {
return processPriority;
}
public boolean isUseSoftwareRenderer() {
return useSoftwareRenderer;
public Renderer getRenderer() {
return renderer;
}
public boolean isUseNativeGLFW() {
@@ -442,8 +442,8 @@ public class LaunchOptions implements Serializable {
return options.nativesDir;
}
public boolean isUseSoftwareRenderer() {
return options.useSoftwareRenderer;
public Renderer getRenderer() {
return options.renderer;
}
public boolean isUseNativeGLFW() {
@@ -592,8 +592,8 @@ public class LaunchOptions implements Serializable {
return this;
}
public Builder setUseSoftwareRenderer(boolean useSoftwareRenderer) {
options.useSoftwareRenderer = useSoftwareRenderer;
public Builder setRenderer(@NotNull Renderer renderer) {
options.renderer = renderer;
return this;
}

View File

@@ -0,0 +1,8 @@
package org.jackhuang.hmcl.game;
public enum Renderer {
DEFAULT,
ZINK,
LLVMPIPE,
D3D12
}

View File

@@ -469,9 +469,16 @@ public class DefaultLauncher extends Launcher {
env.put("INST_MC_DIR", repository.getRunDirectory(version.getId()).getAbsolutePath());
env.put("INST_JAVA", options.getJava().getBinary().toString());
if (options.isUseSoftwareRenderer() && OperatingSystem.CURRENT_OS == OperatingSystem.LINUX) {
env.put("LIBGL_ALWAYS_SOFTWARE", "1");
env.put("__GLX_VENDOR_LIBRARY_NAME", "mesa");
Renderer renderer = options.getRenderer();
if (renderer != Renderer.DEFAULT && OperatingSystem.CURRENT_OS != OperatingSystem.OSX) {
if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX) {
env.put("__GLX_VENDOR_LIBRARY_NAME", "mesa");
if (renderer == Renderer.LLVMPIPE)
env.put("LIBGL_ALWAYS_SOFTWARE", "1");
}
if (renderer != Renderer.LLVMPIPE)
env.put("GALLIUM_DRIVER", renderer.name().toLowerCase(Locale.ROOT));
}
LibraryAnalyzer analyzer = LibraryAnalyzer.analyze(version);