From 07876b0d0dde3f9d07c290a1bcce446b4f7e3635 Mon Sep 17 00:00:00 2001
From: alexytomi <60690056+alexytomi@users.noreply.github.com>
Date: Wed, 16 Jul 2025 08:06:57 +0800
Subject: [PATCH 1/3] fix(strings): Update Holy GL4ES string
Holy GL4ES breaks on 1.21.5 due to it using glFramebuffer extensively,
which GL4ES didn't like
1.21.6 doubles down on this by using UBOs which the target API of ES2.X
on GL4ES cannot easily handle, so this is likely the end of things for
GL4ES
---
app_pojavlauncher/src/main/res/values-en-rGB/strings.xml | 2 +-
app_pojavlauncher/src/main/res/values/strings.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app_pojavlauncher/src/main/res/values-en-rGB/strings.xml b/app_pojavlauncher/src/main/res/values-en-rGB/strings.xml
index 86db929bb..36dc2d752 100644
--- a/app_pojavlauncher/src/main/res/values-en-rGB/strings.xml
+++ b/app_pojavlauncher/src/main/res/values-en-rGB/strings.xml
@@ -46,7 +46,7 @@
JVM Launch arguments
Be careful, this may make game crash if modified without knowledge.
Renderer
- Holy GL4ES - (all versions, fast)
+ Holy GL4ES - (1.21.4< only, fast)
Zink (Vulkan) - (all versions, mid)
Release
Snapshot
diff --git a/app_pojavlauncher/src/main/res/values/strings.xml b/app_pojavlauncher/src/main/res/values/strings.xml
index 8ff87f43f..5b830b622 100644
--- a/app_pojavlauncher/src/main/res/values/strings.xml
+++ b/app_pojavlauncher/src/main/res/values/strings.xml
@@ -65,7 +65,7 @@
Extra Renderer Settings
Renderer specific settings
Renderer
- Holy GL4ES - (all versions, fast)
+ Holy GL4ES - (1.21.4< only, fast)
Zink (Vulkan) - (all versions, mid)
MobileGlues (OpenGL ES) - (1.17+ only, fast)
LTW (OpenGL ES 3) - 1.17+ only
From adcd35e065464941e6904de18143448c91cf2f98 Mon Sep 17 00:00:00 2001
From: alexytomi <60690056+alexytomi@users.noreply.github.com>
Date: Tue, 22 Jul 2025 20:17:17 +0800
Subject: [PATCH 2/3] add(Tools.java): Add more functions and an overload
---
.../main/java/net/kdt/pojavlaunch/Tools.java | 45 +++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java
index 82d101fc9..c8268477a 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java
@@ -822,6 +822,9 @@ public final class Tools {
public static void dialogOnUiThread(final Activity activity, final CharSequence title, final CharSequence message) {
activity.runOnUiThread(()->dialog(activity, title, message));
}
+ public static void dialogOnUiThread(final Activity activity, final int title, final int message) {
+ dialogOnUiThread(activity, activity.getString(title), activity.getString(message));
+ }
public static void dialog(final Context context, final CharSequence title, final CharSequence message) {
new AlertDialog.Builder(context)
@@ -1506,5 +1509,47 @@ public final class Tools {
hasNoOnlineProfileDialog(activity, null, customTitle, customMessage);
}
+ public static String getSelectedVanillaMcVer(){
+ String selectedProfile = LauncherPreferences.DEFAULT_PREF.getString(LauncherPreferences.PREF_KEY_CURRENT_PROFILE, "");
+ MinecraftProfile selected = LauncherProfiles.mainProfileJson.profiles.get(selectedProfile);
+ if (selected == null) { // This should NEVER happen.
+ throw new RuntimeException("No profile selected, how did you reach this? Go ask in the discord or github");
+ }
+ String currentMCVersion = selected.lastVersionId;
+ String vanillaVersion = currentMCVersion;
+ File providedJsonFile = new File(Tools.DIR_HOME_VERSION + "/" + currentMCVersion + "/" + currentMCVersion + ".json");
+ JMinecraftVersionList.Version providedJsonVersion = null;
+ try {
+ providedJsonVersion = Tools.GLOBAL_GSON.fromJson(Tools.read(providedJsonFile.getAbsolutePath()), JMinecraftVersionList.Version.class);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ try {
+ vanillaVersion = providedJsonVersion.inheritsFrom != null ? providedJsonVersion.inheritsFrom : vanillaVersion;
+ } catch (NullPointerException e) {
+ throw new RuntimeException(e);
+ }
+ return vanillaVersion;
+ }
+ public static Integer mcVersiontoInt(String mcVersion){
+ String[] sVersionArray = mcVersion.split("\\.");
+ String[] iVersionArray = new String[3];
+ // Make sure this is actually a version string
+ for (int i = 0; i < iVersionArray.length; i++) {
+ // Ensure there's padding
+ sVersionArray[i] = String.format("%3s", sVersionArray[i]).replace(' ', '0');
+ System.out.println(sVersionArray[i]);
+ // Grab only the last 3, MCJE 999.999.999 isnt coming soon anyway
+ sVersionArray[i] = sVersionArray[i].substring(sVersionArray[i].length() - 3);
+ try {
+ // Verify its a real deal, legit number
+ Integer.parseInt(sVersionArray[i]);
+ iVersionArray[i] = sVersionArray[i];
+ } catch (NumberFormatException e) {
+ throw new RuntimeException("Tools(mcVersiontoInt): Invalid version string");
+ }
+ }
+ return Integer.parseInt(iVersionArray[0] + iVersionArray[1] + iVersionArray[2]);
+ }
}
From 6cfb9cb18a2de13f796b41a2330d86402b95759a Mon Sep 17 00:00:00 2001
From: alexytomi <60690056+alexytomi@users.noreply.github.com>
Date: Wed, 23 Jul 2025 03:02:04 +0800
Subject: [PATCH 3/3] rework(Renderer/Default): Remove "Global Default" and
check based on mcver
Just use profile customization.
---
.../src/main/java/net/kdt/pojavlaunch/MainActivity.java | 5 ++++-
.../net/kdt/pojavlaunch/prefs/LauncherPreferences.java | 2 --
.../prefs/screens/LauncherPreferenceVideoFragment.java | 6 ------
app_pojavlauncher/src/main/res/xml/pref_video.xml | 8 +-------
4 files changed, 5 insertions(+), 16 deletions(-)
diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java
index f35eb39f9..5b63a8173 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java
@@ -357,7 +357,10 @@ public class MainActivity extends BaseActivity implements ControlButtonMenuListe
private void runCraft(String versionId, JMinecraftVersionList.Version version) throws Throwable {
if(Tools.LOCAL_RENDERER == null) {
- Tools.LOCAL_RENDERER = LauncherPreferences.PREF_RENDERER;
+ Integer iSelectedMcVer = Tools.mcVersiontoInt(Tools.getSelectedVanillaMcVer());
+ if (iSelectedMcVer >= 1021005) {
+ Tools.LOCAL_RENDERER = "opengles_mobileglues";
+ } else Tools.LOCAL_RENDERER = "opengles2";
}
if(!Tools.checkRendererCompatible(this, Tools.LOCAL_RENDERER)) {
Tools.RenderersList renderersList = Tools.getCompatibleRenderers(this);
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 1b06c7542..dc4dd71ad 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
@@ -27,7 +27,6 @@ public class LauncherPreferences {
public static final String PREF_KEY_SKIP_NOTIFICATION_CHECK = "skipNotificationPermissionCheck";
public static SharedPreferences DEFAULT_PREF;
- public static String PREF_RENDERER = "opengles2";
public static boolean PREF_IGNORE_NOTCH = false;
public static int PREF_NOTCH_SIZE = 0;
@@ -79,7 +78,6 @@ public class LauncherPreferences {
Tools.initStorageConstants(ctx);
boolean isDevicePowerful = isDevicePowerful(ctx);
- PREF_RENDERER = DEFAULT_PREF.getString("renderer", "opengles2");
PREF_BUTTONSIZE = DEFAULT_PREF.getInt("buttonscale", 100);
PREF_MOUSESCALE = DEFAULT_PREF.getInt("mousescale", 100)/100f;
PREF_MOUSESPEED = ((float)DEFAULT_PREF.getInt("mousespeed",100))/100f;
diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceVideoFragment.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceVideoFragment.java
index 14f412e51..c17bfd417 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceVideoFragment.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceVideoFragment.java
@@ -45,12 +45,6 @@ public class LauncherPreferenceVideoFragment extends LauncherPreferenceFragment
requirePreference("alternate_surface", SwitchPreferenceCompat.class).setChecked(LauncherPreferences.PREF_USE_ALTERNATE_SURFACE);
requirePreference("force_vsync", SwitchPreferenceCompat.class).setChecked(LauncherPreferences.PREF_FORCE_VSYNC);
- ListPreference rendererListPreference = requirePreference("renderer",
- ListPreference.class);
- Tools.RenderersList renderersList = Tools.getCompatibleRenderers(getContext());
- rendererListPreference.setEntries(renderersList.rendererDisplayNames);
- rendererListPreference.setEntryValues(renderersList.rendererIds.toArray(new String[0]));
-
computeVisibility();
}
diff --git a/app_pojavlauncher/src/main/res/xml/pref_video.xml b/app_pojavlauncher/src/main/res/xml/pref_video.xml
index 0d96c6f61..f0dbf92b2 100644
--- a/app_pojavlauncher/src/main/res/xml/pref_video.xml
+++ b/app_pojavlauncher/src/main/res/xml/pref_video.xml
@@ -5,16 +5,10 @@
-
-