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 86db929bb6..36dc2d752e 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 8ff87f43f3..5b830b6222 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 | 47 ++++++++++++++++++-
1 file changed, 46 insertions(+), 1 deletion(-)
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 82d101fc9a..c8268477a1 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 static void showErrorRemote(String rolledMessage, Throwable e) {
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 static void hasNoOnlineProfileDialog(Activity activity, String customTitl
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 f35eb39f9c..5b63a8173c 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 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
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 1b06c75426..dc4dd71adf 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 static void loadPreferences(Context ctx) {
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 14f412e513..c17bfd4171 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 void onCreatePreferences(Bundle b, String str) {
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 0d96c6f614..f0dbf92b2c 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 @@
-
-