mirror of
https://github.com/AngelAuraMC/Amethyst-Android.git
synced 2025-09-18 00:59:35 -04:00
Changes
"Localize" renderer selection mechanism to several other classes Add renderer changer to Per-Version Config Move Per-Version Config to a separate class
This commit is contained in:
parent
ea6bd5f5a3
commit
67fac9a610
@ -103,7 +103,7 @@ public class BaseMainActivity extends LoggableActivity {
|
|||||||
|
|
||||||
private File logFile;
|
private File logFile;
|
||||||
private PrintStream logStream;
|
private PrintStream logStream;
|
||||||
|
private PerVersionConfig.VersionConfig config;
|
||||||
/*
|
/*
|
||||||
private LinearLayout contentCanvas;
|
private LinearLayout contentCanvas;
|
||||||
private AWTSurfaceView contentCanvasView;
|
private AWTSurfaceView contentCanvasView;
|
||||||
@ -140,14 +140,17 @@ public class BaseMainActivity extends LoggableActivity {
|
|||||||
|
|
||||||
setTitle("Minecraft " + mProfile.selectedVersion);
|
setTitle("Minecraft " + mProfile.selectedVersion);
|
||||||
PerVersionConfig.update();
|
PerVersionConfig.update();
|
||||||
PerVersionConfig.VersionConfig cfg = PerVersionConfig.configMap.get(mProfile.selectedVersion);
|
config = PerVersionConfig.configMap.get(mProfile.selectedVersion);
|
||||||
String runtime = LauncherPreferences.PREF_DEFAULT_RUNTIME;
|
String runtime = LauncherPreferences.PREF_DEFAULT_RUNTIME;
|
||||||
if(cfg != null) {
|
if(config != null) {
|
||||||
if(cfg.selectedRuntime != null) {
|
if(config.selectedRuntime != null) {
|
||||||
if(MultiRTUtils.forceReread(cfg.selectedRuntime).versionString != null) {
|
if(MultiRTUtils.forceReread(config.selectedRuntime).versionString != null) {
|
||||||
runtime = cfg.selectedRuntime;
|
runtime = config.selectedRuntime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(config.renderer != null) {
|
||||||
|
Tools.LOCAL_RENDERER = config.renderer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
MultiRTUtils.setRuntimeNamed(this,runtime);
|
MultiRTUtils.setRuntimeNamed(this,runtime);
|
||||||
// Minecraft 1.13+
|
// Minecraft 1.13+
|
||||||
@ -904,10 +907,12 @@ public class BaseMainActivity extends LoggableActivity {
|
|||||||
mLogObserver.startWatching();
|
mLogObserver.startWatching();
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
if(Tools.LOCAL_RENDERER == null) {
|
||||||
|
Tools.LOCAL_RENDERER = LauncherPreferences.PREF_RENDERER;
|
||||||
|
}
|
||||||
appendlnToLog("--------- beggining with launcher debug");
|
appendlnToLog("--------- beggining with launcher debug");
|
||||||
appendlnToLog("Info: Launcher version: " + BuildConfig.VERSION_NAME);
|
appendlnToLog("Info: Launcher version: " + BuildConfig.VERSION_NAME);
|
||||||
if (LauncherPreferences.PREF_RENDERER.equals("vulkan_zink")) {
|
if (Tools.LOCAL_RENDERER.equals("vulkan_zink")) {
|
||||||
checkVulkanZinkIsSupported();
|
checkVulkanZinkIsSupported();
|
||||||
}
|
}
|
||||||
checkLWJGL3Installed();
|
checkLWJGL3Installed();
|
||||||
|
@ -45,6 +45,7 @@ public final class Tools
|
|||||||
|
|
||||||
public static String DIR_DATA = "/data/data/" + BuildConfig.APPLICATION_ID;
|
public static String DIR_DATA = "/data/data/" + BuildConfig.APPLICATION_ID;
|
||||||
public static String MULTIRT_HOME = DIR_DATA+"/runtimes";
|
public static String MULTIRT_HOME = DIR_DATA+"/runtimes";
|
||||||
|
public static String LOCAL_RENDERER = null;
|
||||||
public static String CURRENT_ARCHITECTURE;
|
public static String CURRENT_ARCHITECTURE;
|
||||||
|
|
||||||
// New since 3.3.1
|
// New since 3.3.1
|
||||||
@ -79,7 +80,8 @@ public final class Tools
|
|||||||
ctx.runOnUiThread(() -> {
|
ctx.runOnUiThread(() -> {
|
||||||
androidx.appcompat.app.AlertDialog.Builder b = new androidx.appcompat.app.AlertDialog.Builder(ctx)
|
androidx.appcompat.app.AlertDialog.Builder b = new androidx.appcompat.app.AlertDialog.Builder(ctx)
|
||||||
.setMessage(ctx.getString(R.string.memory_warning_msg,(mi.availMem/1048576L),LauncherPreferences.PREF_RAM_ALLOCATION))
|
.setMessage(ctx.getString(R.string.memory_warning_msg,(mi.availMem/1048576L),LauncherPreferences.PREF_RAM_ALLOCATION))
|
||||||
.setPositiveButton(android.R.string.ok, (dialogInterface, i) -> {synchronized(memoryErrorLock){memoryErrorLock.notifyAll();}});
|
.setPositiveButton(android.R.string.ok, (dialogInterface, i) -> {synchronized(memoryErrorLock){memoryErrorLock.notifyAll();}})
|
||||||
|
.setOnCancelListener((i) -> {synchronized(memoryErrorLock){memoryErrorLock.notifyAll();}});
|
||||||
b.show();
|
b.show();
|
||||||
});
|
});
|
||||||
synchronized (memoryErrorLock) {
|
synchronized (memoryErrorLock) {
|
||||||
@ -155,7 +157,7 @@ public final class Tools
|
|||||||
javaArgList.add(cacioClasspath.toString());
|
javaArgList.add(cacioClasspath.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void getJavaArgs(Context ctx, List<String> javaArgList) {
|
public static void getJavaArgs(Context ctx, List<String> javaArgList, String renderLib) {
|
||||||
List<String> overrideableArgList = new ArrayList<String>();
|
List<String> overrideableArgList = new ArrayList<String>();
|
||||||
|
|
||||||
overrideableArgList.add("-Djava.home=" + Tools.DIR_HOME_JRE);
|
overrideableArgList.add("-Djava.home=" + Tools.DIR_HOME_JRE);
|
||||||
@ -173,7 +175,7 @@ public final class Tools
|
|||||||
// javaArgList.add("-Dorg.lwjgl.libname=liblwjgl3.so");
|
// javaArgList.add("-Dorg.lwjgl.libname=liblwjgl3.so");
|
||||||
// javaArgList.add("-Dorg.lwjgl.system.jemalloc.libname=libjemalloc.so");
|
// javaArgList.add("-Dorg.lwjgl.system.jemalloc.libname=libjemalloc.so");
|
||||||
|
|
||||||
overrideableArgList.add("-Dorg.lwjgl.opengl.libname=" + LauncherPreferences.PREF_CUSTOM_OPENGL_LIBNAME);
|
overrideableArgList.add("-Dorg.lwjgl.opengl.libname=" + renderLib);
|
||||||
// overrideableArgList.add("-Dorg.lwjgl.opengl.libname=libgl4es_115.so");
|
// overrideableArgList.add("-Dorg.lwjgl.opengl.libname=libgl4es_115.so");
|
||||||
|
|
||||||
// javaArgList.add("-Dorg.lwjgl.opengl.libname=libRegal.so");
|
// javaArgList.add("-Dorg.lwjgl.opengl.libname=libRegal.so");
|
||||||
|
@ -85,23 +85,7 @@ public class LauncherPreferences
|
|||||||
|
|
||||||
if (PREF_RENDERER.equals("2") || PREF_RENDERER.equals("3")) {
|
if (PREF_RENDERER.equals("2") || PREF_RENDERER.equals("3")) {
|
||||||
PREF_RENDERER = "opengles" + PREF_RENDERER;
|
PREF_RENDERER = "opengles" + PREF_RENDERER;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (PREF_RENDERER) {
|
|
||||||
case "opengles2":
|
|
||||||
PREF_CUSTOM_OPENGL_LIBNAME = "libgl4es_114.so";
|
|
||||||
break;
|
|
||||||
case "opengles2_5":
|
|
||||||
case "opengles3":
|
|
||||||
PREF_CUSTOM_OPENGL_LIBNAME = "libgl4es_115.so";
|
|
||||||
break;
|
|
||||||
case "vulkan_zink":
|
|
||||||
PREF_CUSTOM_OPENGL_LIBNAME = "libOSMesa_8.so";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new RuntimeException("Undefined renderer: " + PREF_RENDERER);
|
|
||||||
}
|
|
||||||
|
|
||||||
String argLwjglLibname = "-Dorg.lwjgl.opengl.libname=";
|
String argLwjglLibname = "-Dorg.lwjgl.opengl.libname=";
|
||||||
for (String arg : PREF_CUSTOM_JAVA_ARGS.split(" ")) {
|
for (String arg : PREF_CUSTOM_JAVA_ARGS.split(" ")) {
|
||||||
if (arg.startsWith(argLwjglLibname)) {
|
if (arg.startsWith(argLwjglLibname)) {
|
||||||
|
@ -0,0 +1,120 @@
|
|||||||
|
package net.kdt.pojavlaunch.prefs;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.Spinner;
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AlertDialog;
|
||||||
|
|
||||||
|
import net.kdt.pojavlaunch.R;
|
||||||
|
import net.kdt.pojavlaunch.multirt.MultiRTUtils;
|
||||||
|
import net.kdt.pojavlaunch.multirt.RTSpinnerAdapter;
|
||||||
|
import net.kdt.pojavlaunch.tasks.RefreshVersionListTask;
|
||||||
|
import net.kdt.pojavlaunch.value.PerVersionConfig;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PerVersionConfigDialog{
|
||||||
|
final Context ctx;
|
||||||
|
final AlertDialog dialog;
|
||||||
|
final View v;
|
||||||
|
List<MultiRTUtils.Runtime> runtimes;
|
||||||
|
final Spinner javaVMSpinner;
|
||||||
|
final Spinner rendererSpinner;
|
||||||
|
final EditText customDirText;
|
||||||
|
final EditText jvmArgsEditText;
|
||||||
|
final List<String> renderNames;
|
||||||
|
String selectedGameVersion = null;
|
||||||
|
public PerVersionConfigDialog(Context _ctx) {
|
||||||
|
ctx = _ctx;
|
||||||
|
v = LayoutInflater.from(ctx).inflate(R.layout.pvc_popup,null);
|
||||||
|
javaVMSpinner = v.findViewById(R.id.pvc_javaVm);
|
||||||
|
rendererSpinner = v.findViewById(R.id.pvc_renderer);
|
||||||
|
{
|
||||||
|
List<String> renderList = new ArrayList<>();
|
||||||
|
Collections.addAll(renderList, ctx.getResources().getStringArray(R.array.renderer));
|
||||||
|
renderList.add("Default");
|
||||||
|
renderNames = Arrays.asList(ctx.getResources().getStringArray(R.array.renderer_values));
|
||||||
|
rendererSpinner.setAdapter(new ArrayAdapter<>(ctx, android.R.layout.simple_spinner_dropdown_item,renderList));
|
||||||
|
}
|
||||||
|
customDirText = v.findViewById(R.id.pvc_customDir);
|
||||||
|
jvmArgsEditText = v.findViewById(R.id.pvc_jvmArgs);
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
|
||||||
|
builder.setView(v);
|
||||||
|
builder.setTitle("Per-version settings");
|
||||||
|
builder.setNegativeButton(android.R.string.cancel,(dialogInterface,i)->dialogInterface.dismiss());
|
||||||
|
builder.setPositiveButton(android.R.string.ok,this::save);
|
||||||
|
dialog = builder.create();
|
||||||
|
}
|
||||||
|
public void refreshRuntimes() {
|
||||||
|
if(runtimes!=null)runtimes.clear();
|
||||||
|
runtimes = MultiRTUtils.getRuntimes();
|
||||||
|
//runtimes.add(new MultiRTUtils.Runtime("<Default>"));
|
||||||
|
}
|
||||||
|
private void save(DialogInterface i, int which) {
|
||||||
|
if(selectedGameVersion == null) {
|
||||||
|
i.dismiss();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
PerVersionConfig.VersionConfig conf1 = PerVersionConfig.configMap.get(selectedGameVersion);
|
||||||
|
if(conf1==null){
|
||||||
|
conf1=new PerVersionConfig.VersionConfig();
|
||||||
|
}
|
||||||
|
conf1.jvmArgs=jvmArgsEditText.getText().toString();
|
||||||
|
conf1.gamePath=customDirText.getText().toString();
|
||||||
|
|
||||||
|
if(rendererSpinner.getSelectedItemPosition() == renderNames.size()) conf1.renderer = null;
|
||||||
|
else conf1.renderer = renderNames.get(rendererSpinner.getSelectedItemPosition());
|
||||||
|
|
||||||
|
String runtime=((MultiRTUtils.Runtime)javaVMSpinner.getSelectedItem()).name;;
|
||||||
|
if(!runtime.equals("<Default>"))conf1.selectedRuntime=runtime;
|
||||||
|
else conf1.selectedRuntime=null;
|
||||||
|
|
||||||
|
PerVersionConfig.configMap.put(selectedGameVersion,conf1);
|
||||||
|
try{
|
||||||
|
PerVersionConfig.update();
|
||||||
|
}catch(IOException e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public boolean openConfig(String selectedVersion) {
|
||||||
|
selectedGameVersion = selectedVersion;
|
||||||
|
try{
|
||||||
|
PerVersionConfig.update();
|
||||||
|
}catch(IOException e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
PerVersionConfig.VersionConfig conf=PerVersionConfig.configMap.get(selectedGameVersion);
|
||||||
|
refreshRuntimes();
|
||||||
|
javaVMSpinner.setAdapter(new RTSpinnerAdapter(ctx,runtimes));
|
||||||
|
{
|
||||||
|
int jvm_index = runtimes.indexOf(new MultiRTUtils.Runtime("<Default>"));
|
||||||
|
int rnd_index = rendererSpinner.getAdapter().getCount()-1;
|
||||||
|
if (conf != null) {
|
||||||
|
customDirText.setText(conf.gamePath);
|
||||||
|
jvmArgsEditText.setText(conf.jvmArgs);
|
||||||
|
if (conf.selectedRuntime != null) {
|
||||||
|
int nindex = runtimes.indexOf(new MultiRTUtils.Runtime(conf.selectedRuntime));
|
||||||
|
if (nindex != -1) jvm_index = nindex;
|
||||||
|
}
|
||||||
|
if(conf.renderer != null) {
|
||||||
|
int nindex = renderNames.indexOf(conf.renderer);
|
||||||
|
if (nindex != -1) rnd_index = nindex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
javaVMSpinner.setSelection(jvm_index);
|
||||||
|
rendererSpinner.setSelection(rnd_index);
|
||||||
|
}
|
||||||
|
dialog.show();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -71,60 +71,9 @@ public class RefreshVersionListTask extends AsyncTask<Void, Void, ArrayList<Stri
|
|||||||
} else {
|
} else {
|
||||||
mActivity.mVersionSelector.setSelection(selectAt(mActivity.mAvailableVersions, mActivity.mProfile.selectedVersion));
|
mActivity.mVersionSelector.setSelection(selectAt(mActivity.mAvailableVersions, mActivity.mProfile.selectedVersion));
|
||||||
}
|
}
|
||||||
View.OnLongClickListener listener = new View.OnLongClickListener() {
|
PerVersionConfigDialog dialog = new PerVersionConfigDialog(this.mActivity);
|
||||||
@Override
|
mActivity.mVersionSelector.setOnLongClickListener((v)->dialog.openConfig(mActivity.mProfile.selectedVersion));
|
||||||
public boolean onLongClick(View view) {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
|
|
||||||
final View v = LayoutInflater.from(view.getContext()).inflate(R.layout.pvc_popup,null);
|
|
||||||
final List<MultiRTUtils.Runtime> runtimes = MultiRTUtils.getRuntimes();
|
|
||||||
final Spinner javaVMSpinner = ((Spinner)v.findViewById(R.id.pvc_javaVm));
|
|
||||||
final EditText customDirText = ((EditText)v.findViewById(R.id.pvc_customDir));
|
|
||||||
final EditText jvmArgsEditText = ((EditText)v.findViewById(R.id.pvc_jvmArgs));
|
|
||||||
javaVMSpinner.setAdapter(new RTSpinnerAdapter(RefreshVersionListTask.this.mActivity,runtimes));
|
|
||||||
try {
|
|
||||||
PerVersionConfig.update();
|
|
||||||
}catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
PerVersionConfig.VersionConfig conf = PerVersionConfig.configMap.get(mActivity.mProfile.selectedVersion);
|
|
||||||
int index = runtimes.indexOf(new MultiRTUtils.Runtime("<Default>"));
|
|
||||||
|
|
||||||
if(conf != null) {
|
|
||||||
customDirText.setText(conf.gamePath);
|
|
||||||
jvmArgsEditText.setText(conf.jvmArgs);
|
|
||||||
if(conf.selectedRuntime != null) {
|
|
||||||
int nindex = runtimes.indexOf(new MultiRTUtils.Runtime(conf.selectedRuntime));
|
|
||||||
if(nindex != -1) index = nindex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
javaVMSpinner.setSelection(index);
|
|
||||||
builder.setView(v);
|
|
||||||
builder.setTitle("Per-version settings");
|
|
||||||
builder.setNegativeButton(android.R.string.cancel, (dialogInterface, i) -> dialogInterface.dismiss());
|
|
||||||
builder.setPositiveButton(android.R.string.ok, (dialogInterface, i) -> {
|
|
||||||
PerVersionConfig.VersionConfig conf1 = PerVersionConfig.configMap.get(mActivity.mProfile.selectedVersion);
|
|
||||||
if(conf1 == null) {
|
|
||||||
conf1 = new PerVersionConfig.VersionConfig();
|
|
||||||
}
|
|
||||||
conf1.jvmArgs = jvmArgsEditText.getText().toString();
|
|
||||||
conf1.gamePath = customDirText.getText().toString();
|
|
||||||
String runtime = ((MultiRTUtils.Runtime)javaVMSpinner.getSelectedItem()).name;;
|
|
||||||
if(!runtime.equals("<Default>")) conf1.selectedRuntime = runtime;
|
|
||||||
else conf1.selectedRuntime = null;
|
|
||||||
PerVersionConfig.configMap.put(mActivity.mProfile.selectedVersion, conf1);
|
|
||||||
try {
|
|
||||||
PerVersionConfig.update();
|
|
||||||
}catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
builder.show();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
mActivity.mVersionSelector.setOnLongClickListener(listener);
|
|
||||||
mActivity.mVersionSelector.setOnItemSelectedListener(new OnItemSelectedListener(){
|
mActivity.mVersionSelector.setOnItemSelectedListener(new OnItemSelectedListener(){
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onItemSelected(AdapterView<?> p1, View p2, int p3, long p4)
|
public void onItemSelected(AdapterView<?> p1, View p2, int p3, long p4)
|
||||||
{
|
{
|
||||||
|
@ -87,15 +87,6 @@ public class JREUtils
|
|||||||
}
|
}
|
||||||
dlopen(nativeLibDir + "/libopenal.so");
|
dlopen(nativeLibDir + "/libopenal.so");
|
||||||
|
|
||||||
// may not necessary
|
|
||||||
if (LauncherPreferences.PREF_CUSTOM_OPENGL_LIBNAME.equals("libgl4es_114.so")) {
|
|
||||||
LauncherPreferences.PREF_CUSTOM_OPENGL_LIBNAME = nativeLibDir + "/libgl4es_114.so";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!dlopen(LauncherPreferences.PREF_CUSTOM_OPENGL_LIBNAME) && !dlopen(findInLdLibPath(LauncherPreferences.PREF_CUSTOM_OPENGL_LIBNAME))) {
|
|
||||||
System.err.println("Failed to load custom OpenGL library " + LauncherPreferences.PREF_CUSTOM_OPENGL_LIBNAME + ". Fallbacking to GL4ES.");
|
|
||||||
dlopen(nativeLibDir + "/libgl4es_114.so");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<String, String> readJREReleaseProperties() throws IOException {
|
public static Map<String, String> readJREReleaseProperties() throws IOException {
|
||||||
@ -225,7 +216,7 @@ public class JREUtils
|
|||||||
envMap.put("REGAL_GL_RENDERER", "Regal");
|
envMap.put("REGAL_GL_RENDERER", "Regal");
|
||||||
envMap.put("REGAL_GL_VERSION", "4.5");
|
envMap.put("REGAL_GL_VERSION", "4.5");
|
||||||
|
|
||||||
envMap.put("POJAV_RENDERER", LauncherPreferences.PREF_RENDERER);
|
envMap.put("POJAV_RENDERER", Tools.LOCAL_RENDERER);
|
||||||
|
|
||||||
envMap.put("AWTSTUB_WIDTH", Integer.toString(CallbackBridge.windowWidth > 0 ? CallbackBridge.windowWidth : CallbackBridge.physicalWidth));
|
envMap.put("AWTSTUB_WIDTH", Integer.toString(CallbackBridge.windowWidth > 0 ? CallbackBridge.windowWidth : CallbackBridge.physicalWidth));
|
||||||
envMap.put("AWTSTUB_HEIGHT", Integer.toString(CallbackBridge.windowHeight > 0 ? CallbackBridge.windowHeight : CallbackBridge.physicalHeight));
|
envMap.put("AWTSTUB_HEIGHT", Integer.toString(CallbackBridge.windowHeight > 0 ? CallbackBridge.windowHeight : CallbackBridge.physicalHeight));
|
||||||
@ -248,8 +239,8 @@ public class JREUtils
|
|||||||
if (glesMajor < 3) {
|
if (glesMajor < 3) {
|
||||||
//fallback to 2 since it's the minimum for the entire app
|
//fallback to 2 since it's the minimum for the entire app
|
||||||
envMap.put("LIBGL_ES","2");
|
envMap.put("LIBGL_ES","2");
|
||||||
} else if (LauncherPreferences.PREF_RENDERER.startsWith("opengles")) {
|
} else if (Tools.LOCAL_RENDERER.startsWith("opengles")) {
|
||||||
envMap.put("LIBGL_ES", LauncherPreferences.PREF_RENDERER.replace("opengles", "").replace("_5", ""));
|
envMap.put("LIBGL_ES", Tools.LOCAL_RENDERER.replace("opengles", "").replace("_5", ""));
|
||||||
} else {
|
} else {
|
||||||
// TODO if can: other backends such as Vulkan.
|
// TODO if can: other backends such as Vulkan.
|
||||||
// Sure, they should provide GLES 3 support.
|
// Sure, they should provide GLES 3 support.
|
||||||
@ -273,10 +264,34 @@ public class JREUtils
|
|||||||
public static int launchJavaVM(final LoggableActivity ctx, final List<String> args) throws Throwable {
|
public static int launchJavaVM(final LoggableActivity ctx, final List<String> args) throws Throwable {
|
||||||
JREUtils.relocateLibPath(ctx);
|
JREUtils.relocateLibPath(ctx);
|
||||||
// ctx.appendlnToLog("LD_LIBRARY_PATH = " + JREUtils.LD_LIBRARY_PATH);
|
// ctx.appendlnToLog("LD_LIBRARY_PATH = " + JREUtils.LD_LIBRARY_PATH);
|
||||||
|
final String graphicsLib;
|
||||||
|
if(Tools.LOCAL_RENDERER != null){
|
||||||
|
switch (Tools.LOCAL_RENDERER) {
|
||||||
|
case "opengles2":
|
||||||
|
graphicsLib = "libgl4es_114.so";
|
||||||
|
break;
|
||||||
|
case "opengles2_5":
|
||||||
|
case "opengles3":
|
||||||
|
graphicsLib = "libgl4es_115.so";
|
||||||
|
break;
|
||||||
|
case "vulkan_zink":
|
||||||
|
graphicsLib = "libOSMesa_8.so";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new RuntimeException("Undefined renderer: " + Tools.LOCAL_RENDERER);
|
||||||
|
}
|
||||||
|
if (!dlopen(graphicsLib) && !dlopen(findInLdLibPath(graphicsLib))) {
|
||||||
|
System.err.println("Failed to load renderer " + graphicsLib + ". Falling back to GL4ES 1.1.4");
|
||||||
|
Tools.LOCAL_RENDERER = "opengles2";
|
||||||
|
dlopen(nativeLibDir + "/libgl4es_114.so");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
graphicsLib = null;
|
||||||
|
}
|
||||||
|
|
||||||
List<String> javaArgList = new ArrayList<String>();
|
List<String> javaArgList = new ArrayList<String>();
|
||||||
javaArgList.add(Tools.DIR_HOME_JRE + "/bin/java");
|
javaArgList.add(Tools.DIR_HOME_JRE + "/bin/java");
|
||||||
Tools.getJavaArgs(ctx, javaArgList);
|
Tools.getJavaArgs(ctx, javaArgList,graphicsLib);
|
||||||
purgeArg(javaArgList,"-Xms");
|
purgeArg(javaArgList,"-Xms");
|
||||||
purgeArg(javaArgList,"-Xmx");
|
purgeArg(javaArgList,"-Xmx");
|
||||||
/*if(Tools.CURRENT_ARCHITECTURE.contains("32") && ((mi.availMem / 1048576L)-50) > 300) {
|
/*if(Tools.CURRENT_ARCHITECTURE.contains("32") && ((mi.availMem / 1048576L)-50) > 300) {
|
||||||
@ -421,6 +436,7 @@ public class JREUtils
|
|||||||
static {
|
static {
|
||||||
System.loadLibrary("pojavexec");
|
System.loadLibrary("pojavexec");
|
||||||
System.loadLibrary("pojavexec_awt");
|
System.loadLibrary("pojavexec_awt");
|
||||||
|
dlopen("libxhook.so");
|
||||||
System.loadLibrary("istdio");
|
System.loadLibrary("istdio");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,5 +28,6 @@ public class PerVersionConfig {
|
|||||||
public String jvmArgs;
|
public String jvmArgs;
|
||||||
public String gamePath;
|
public String gamePath;
|
||||||
public String selectedRuntime;
|
public String selectedRuntime;
|
||||||
|
public String renderer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,4 +44,15 @@
|
|||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/pvc_customDir" />
|
app:layout_constraintTop_toBottomOf="@+id/pvc_customDir" />
|
||||||
|
|
||||||
|
<Spinner
|
||||||
|
android:id="@+id/pvc_renderer"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/pvc_javaVm" />
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
Loading…
x
Reference in New Issue
Block a user