diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java index 75df2d73e..1a17bc41b 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java @@ -6,6 +6,7 @@ import net.kdt.pojavlaunch.*; public class LauncherPreferences { public static SharedPreferences DEFAULT_PREF; + public static int PREF_RENDERER = 2; public static boolean PREF_VERTYPE_RELEASE = true; public static boolean PREF_VERTYPE_SNAPSHOT = false; public static boolean PREF_VERTYPE_OLDALPHA = false; @@ -28,6 +29,7 @@ public class LauncherPreferences public static boolean PREF_DISABLE_GESTURES = false; public static float PREF_MOUSESPEED = 1f; public static void loadPreferences() { + PREF_RENDERER = DEFAULT_PREF.getInt("renderer", 2); PREF_BUTTONSIZE = DEFAULT_PREF.getInt("buttonscale", 100); PREF_MOUSESCALE = DEFAULT_PREF.getInt("mousescale", 100); PREF_MOUSESPEED = ((float)DEFAULT_PREF.getInt("mousespeed",100))/100f; diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java index d72575f5b..e6aceacd8 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java @@ -249,11 +249,11 @@ public class JREUtils if(!envMap.containsKey("LIBGL_ES")) { int glesMajor = getDetectedVersion(); Log.i("glesDetect","GLES version detected: "+glesMajor); - if(glesMajor < 2) { + if (glesMajor < 3) { //fallback to 2 since it's the minimum for the entire app envMap.put("LIBGL_ES","2"); - }else{ - envMap.put("LIBGL_ES",""+glesMajor); + } else { + envMap.put("LIBGL_ES", Integer.toString(LauncherPreferences.PREF_RENDERER)); } } for (Map.Entry env : envMap.entrySet()) { diff --git a/app_pojavlauncher/src/main/jni/egl_bridge.c b/app_pojavlauncher/src/main/jni/egl_bridge.c index bfd414f06..2ccf9612d 100644 --- a/app_pojavlauncher/src/main/jni/egl_bridge.c +++ b/app_pojavlauncher/src/main/jni/egl_bridge.c @@ -64,14 +64,7 @@ JNIEXPORT void JNICALL Java_net_kdt_pojavlaunch_utils_JREUtils_setupBridgeWindow JNIEXPORT jlong JNICALL Java_org_lwjgl_glfw_GLFW_nativeEglGetCurrentContext(JNIEnv* env, jclass clazz) { return (jlong) eglGetCurrentContext(); } -static const EGLint es3_ctx_attribs[] = { - EGL_CONTEXT_CLIENT_VERSION, 3, - EGL_NONE -}; -static const EGLint es2_ctx_attribs[] = { - EGL_CONTEXT_CLIENT_VERSION, 2, - EGL_NONE -}; + JNIEXPORT jboolean JNICALL Java_org_lwjgl_glfw_GLFW_nativeEglInit(JNIEnv* env, jclass clazz) { if (potatoBridge.eglDisplay == NULL || potatoBridge.eglDisplay == EGL_NO_DISPLAY) { potatoBridge.eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); @@ -201,21 +194,22 @@ Java_org_lwjgl_glfw_GLFW_nativeEglDetachOnCurrentThread(JNIEnv *env, jclass claz //Obstruct the context on the current thread eglMakeCurrent(potatoBridge.eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); } + JNIEXPORT jlong JNICALL Java_org_lwjgl_glfw_GLFW_nativeEglCreateContext(JNIEnv *env, jclass clazz, jlong contextSrc) { - EGLContext* ctx = eglCreateContext(potatoBridge.eglDisplay,config,(void*)contextSrc,es3_ctx_attribs); - if (ctx == EGL_NO_CONTEXT) { - printf("EGLBridge: Could not create ES3 context, fallbacking to ES2\n"); - setenv("LIBGL_ES", "2", 1); - ctx = eglCreateContext(potatoBridge.eglDisplay,config,(void*)contextSrc,es2_ctx_attribs); - } else { - setenv("LIBGL_ES", "3", 1); - } + const EGLint ctx_attribs[] = { + EGL_CONTEXT_CLIENT_VERSION, atoi(getenv("LIBGL_ES", "2")), + EGL_NONE + }; + EGLContext* ctx = eglCreateContext(potatoBridge.eglDisplay, config, (void*)contextSrc, ctx_attribs); + if (potatoBridge.eglContext == NULL) potatoBridge.eglContext = ctx; + printf("EGLBridge: Created CTX pointer = %p\n",ctx); //(*env)->ThrowNew(env,(*env)->FindClass(env,"java/lang/Exception"),"Trace exception"); return (long)ctx; } + JNIEXPORT jboolean JNICALL Java_org_lwjgl_glfw_GLFW_nativeEglTerminate(JNIEnv* env, jclass clazz) { terminateEgl(); return JNI_TRUE; diff --git a/app_pojavlauncher/src/main/res/values/headings_array.xml b/app_pojavlauncher/src/main/res/values/headings_array.xml index 11915e475..bf4e37c66 100644 --- a/app_pojavlauncher/src/main/res/values/headings_array.xml +++ b/app_pojavlauncher/src/main/res/values/headings_array.xml @@ -6,4 +6,9 @@ @string/mcl_option_customcontrol @string/mcl_option_about + + + @string/mcl_setting_renderer_gles2 + @string/mcl_setting_renderer_gles3 + diff --git a/app_pojavlauncher/src/main/res/values/strings.xml b/app_pojavlauncher/src/main/res/values/strings.xml index 3b2f22c6a..166fcb22d 100644 --- a/app_pojavlauncher/src/main/res/values/strings.xml +++ b/app_pojavlauncher/src/main/res/values/strings.xml @@ -97,6 +97,9 @@ Be careful, this may make game crash if modified without knowledge. General settings Scaling settings + Renderer + OpenGL ES 2 + OpenGL ES 3 Version type will be in version list Release Snapshot diff --git a/app_pojavlauncher/src/main/res/xml/pref_main.xml b/app_pojavlauncher/src/main/res/xml/pref_main.xml index def1ebc04..c65e28038 100644 --- a/app_pojavlauncher/src/main/res/xml/pref_main.xml +++ b/app_pojavlauncher/src/main/res/xml/pref_main.xml @@ -10,6 +10,12 @@ android:summary="@string/mcl_setting_subtitle_uninstalljre" android:title="@string/mcl_setting_title_uninstalljre" app2:icon="@drawable/rm_jre" /> + +