Skip to content
This repository was archived by the owner on Sep 23, 2025. It is now read-only.

Commit 762751a

Browse files
committed
[Settings/MG]: Add new settings UI for renderer specific options and MG options
Thank you @Vera-Firefly and @MovTery for your respective implementations on your forks. They were used as reference here.
1 parent 54b2e2c commit 762751a

File tree

11 files changed

+232
-3
lines changed

11 files changed

+232
-3
lines changed

app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
349349
}
350350

351351
private void runCraft(String versionId, JMinecraftVersionList.Version version) throws Throwable {
352+
LauncherPreferences.writeMGRendererSettings(); // No MG detection for you
352353
if(Tools.LOCAL_RENDERER == null) {
353354
Tools.LOCAL_RENDERER = LauncherPreferences.PREF_RENDERER;
354355
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package net.kdt.pojavlaunch.prefs;
2+
3+
import androidx.annotation.NonNull;
4+
import androidx.annotation.Nullable;
5+
import androidx.preference.ListPreference;
6+
import androidx.preference.Preference;
7+
8+
public class CustomListSummaryProvider implements Preference.SummaryProvider {
9+
@Nullable
10+
public CharSequence provideSummary(@NonNull Preference preference) {
11+
if (preference.hasKey())
12+
preference.setSummary(preference.getKey());
13+
else preference.setSummary("@string/mcl_setting_title_renderer_settings");
14+
return null;
15+
}
16+
}

app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,12 @@
1515

1616
import net.kdt.pojavlaunch.*;
1717
import net.kdt.pojavlaunch.multirt.MultiRTUtils;
18+
import net.kdt.pojavlaunch.utils.FileUtils;
1819
import net.kdt.pojavlaunch.utils.JREUtils;
1920

21+
import java.io.File;
2022
import java.io.IOException;
23+
import java.util.LinkedHashMap;
2124

2225
public class LauncherPreferences {
2326
public static final String PREF_KEY_CURRENT_PROFILE = "currentProfile";
@@ -216,4 +219,32 @@ public static void computeNotchSize(Activity activity) {
216219
}
217220
Tools.updateWindowSize(activity);
218221
}
219-
}
222+
public static void writeMGRendererSettings() throws IOException {
223+
LinkedHashMap<String, Object> MGConfigJson = new LinkedHashMap<>();
224+
// Copying the defaultValues from pref_renderer.xml to use as defaults here too
225+
226+
// We need to get the string and convert it to int because the android:defaultValues only takes in string-arrays.
227+
// Using .getInt() leads to a class cast exception and using integer-arrays will just crash the layout/fragment.
228+
MGConfigJson.put("enableANGLE", Integer.parseInt(DEFAULT_PREF.getString("mg_renderer_setting_angle", "0")));
229+
MGConfigJson.put("enableNoError", Integer.parseInt(DEFAULT_PREF.getString("mg_renderer_setting_errorSetting", "0")));
230+
231+
// These guys are SwitchPreferences so they get special treatment, they need to be converted to ints
232+
int gl43emu = DEFAULT_PREF.getBoolean("mg_renderer_setting_gl43emu", false) ? 1 : 0;
233+
int computeShaderemu = DEFAULT_PREF.getBoolean("mg_renderer_computeShaderemu", false) ? 1 : 0;
234+
MGConfigJson.put("enableExtGL43", gl43emu);
235+
MGConfigJson.put("enableExtComputeShader", computeShaderemu);
236+
237+
MGConfigJson.put("enableCompatibleMode", Integer.parseInt(DEFAULT_PREF.getString("", "0"))); // Placeholder, doesn't do anything on current MG
238+
MGConfigJson.put("multidrawMode", Integer.parseInt(DEFAULT_PREF.getString("mg_renderer_setting_multidraw", "0")));
239+
MGConfigJson.put("maxGlslCacheSize", Integer.parseInt(DEFAULT_PREF.getString("mg_renderer_setting_glsl_cache_size", "2048")));
240+
File configFile = new File(Tools.DIR_DATA + "/MobileGlues", "config.json");
241+
FileUtils.ensureParentDirectory(configFile);
242+
try {
243+
Tools.write(configFile.getAbsolutePath(),Tools.GLOBAL_GSON.toJson(MGConfigJson));
244+
Logger.appendToLog("Writing MG configs to " + configFile.getAbsolutePath());
245+
Logger.appendToLog("MG Config is " + Tools.GLOBAL_GSON.toJson(MGConfigJson));
246+
} catch (IOException e) {
247+
throw new RuntimeException(e);
248+
}
249+
}
250+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package net.kdt.pojavlaunch.prefs.screens;
2+
3+
import static android.text.InputType.TYPE_CLASS_NUMBER;
4+
5+
import android.content.SharedPreferences;
6+
import android.os.Bundle;
7+
import android.text.Editable;
8+
import android.text.TextWatcher;
9+
10+
import androidx.annotation.NonNull;
11+
import androidx.preference.EditTextPreference;
12+
import androidx.preference.ListPreference;
13+
import androidx.preference.Preference;
14+
15+
import net.kdt.pojavlaunch.R;
16+
17+
import java.util.Objects;
18+
19+
public class LauncherPreferenceRendererSettingsFragment extends LauncherPreferenceFragment {
20+
EditTextPreference GLSLCachePreference;
21+
@Override
22+
public void onCreatePreferences(Bundle b, String str) {
23+
addPreferencesFromResource(R.xml.pref_renderer);
24+
GLSLCachePreference = findPreference("mg_renderer_setting_glsl_cache_size");
25+
GLSLCachePreference.setOnBindEditTextListener((editText) -> {
26+
editText.setInputType(TYPE_CLASS_NUMBER);
27+
editText.addTextChangedListener(new TextWatcher() {
28+
@Override
29+
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
30+
// Nothing, its boilerplate
31+
}
32+
@Override
33+
public void afterTextChanged(Editable editable) {
34+
// Nothing, its boilerplate
35+
}
36+
@Override
37+
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
38+
// This is just to handle the summary not updating when its above max int value
39+
// Horrible I know.
40+
if (editText.getText().toString().isEmpty()){
41+
editText.setText("0");
42+
}
43+
if (Long.parseLong(editText.getText().toString()) > Integer.MAX_VALUE){
44+
editText.setError("Too big! Setting to maximum value");
45+
editText.setText(String.valueOf(Integer.MAX_VALUE));
46+
}
47+
48+
}
49+
});
50+
});
51+
updateGLSLCacheSummary(); // Just updates the summary with the value when user opens the menu. Yes it's out of place.
52+
}
53+
54+
@Override
55+
public void onSharedPreferenceChanged(SharedPreferences p, String s) {
56+
GLSLCachePreference = findPreference("mg_renderer_setting_glsl_cache_size");
57+
updateGLSLCacheSummary();
58+
}
59+
60+
private void updateGLSLCacheSummary() {
61+
try {
62+
if (Objects.equals(Objects.requireNonNull(this.GLSLCachePreference).getText(), "") || Integer.parseInt(Objects.requireNonNull(this.GLSLCachePreference.getText())) == 0) {
63+
this.GLSLCachePreference.setSummary(getString(R.string.global_off));
64+
} else this.GLSLCachePreference.setSummary(this.GLSLCachePreference.getText() + " MB");
65+
} catch (Exception e){ e.printStackTrace(); }
66+
}
67+
}

app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,9 @@ public static void setJavaEnvironment(Activity activity, String jreHome) throws
218218
envMap.put("LIBGL_ES", "3");
219219
envMap.put("POJAVEXEC_EGL","libltw.so"); // Use ANGLE EGL
220220
}
221+
if(LOCAL_RENDERER.equals("opengles_mobileglues")){
222+
envMap.put("MG_DIR_PATH", Tools.DIR_DATA + "/MobileGlues");
223+
}
221224
}
222225
if(LauncherPreferences.PREF_BIG_CORE_AFFINITY) envMap.put("POJAV_BIG_CORE_AFFINITY", "1");
223226
envMap.put("AWTSTUB_WIDTH", Integer.toString(CallbackBridge.windowWidth > 0 ? CallbackBridge.windowWidth : CallbackBridge.physicalWidth));
89.9 KB
Loading

app_pojavlauncher/src/main/res/values/headings_array.xml

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,45 @@
4949
<item>default</item>
5050
<item>bmclapi</item>
5151
</string-array>
52-
52+
<!--TODO: Make this translatable-->
53+
<string-array name="mg_renderer_names_angle">
54+
<item>Disable if possible</item>
55+
<item>Enable if possible</item>
56+
<item>Disabled</item>
57+
<item>Enabled</item>
58+
</string-array>
59+
<string-array name="mg_renderer_values_angle">
60+
<item>0</item>
61+
<item>1</item>
62+
<item>2</item>
63+
<item>3</item>
64+
</string-array>
65+
<!--TODO: Make this translatable-->
66+
<string-array name="mg_renderer_names_multidraw">
67+
<item>Auto</item>
68+
<item>Prefer Indirect</item>
69+
<item>Prefer BaseVertex</item>
70+
<item>Prefer MultiDraw Indirect</item>
71+
<item>Force DrawElements</item>
72+
</string-array>
73+
<string-array name="mg_renderer_values_multidraw">
74+
<item>0</item>
75+
<item>1</item>
76+
<item>2</item>
77+
<item>3</item>
78+
<item>4</item>
79+
</string-array>
80+
<string-array name="mg_renderer_names_errorSetting">
81+
<item>Auto</item>
82+
<item>Don\'t ignore</item>
83+
<item>Ignore shader/program errors</item>
84+
<item>Ignore shader/program/framebuffer errors</item>
85+
</string-array>
86+
<string-array name="mg_renderer_values_errorSetting">
87+
<item>0</item>
88+
<item>1</item>
89+
<item>2</item>
90+
<item>3</item>
91+
<item>4</item>
92+
</string-array>
5393
</resources>

app_pojavlauncher/src/main/res/values/strings.xml

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,12 @@
6363
<string name="mcl_setting_subtitle_mousescale">Change the size of the virtual mouse.</string>
6464
<string name="mcl_setting_title_javaargs">JVM Launch arguments</string>
6565
<string name="mcl_setting_subtitle_javaargs">Be careful, this may make game crash if modified without knowledge.</string>
66+
<string name="mcl_setting_title_renderer_settings">Extra Renderer Settings</string>
67+
<string name="mcl_setting_title_renderer_subtitle">Renderer specific settings</string>
6668
<string name="mcl_setting_category_renderer">Renderer</string>
6769
<string name="mcl_setting_renderer_gles2_4">Holy GL4ES - (all versions, fast)</string>
6870
<string name="mcl_setting_renderer_vulkan_zink">Zink (Vulkan) - (all versions, mid)</string>
71+
<string name="mcl_setting_renderer_mobileglues">MobileGlues (OpenGL ES) - (1.17+ only, fast)</string>
6972
<string name="mcl_setting_renderer_ltw">LTW (OpenGL ES 3) - 1.17+ only</string>
7073
<string name="mcl_setting_veroption_release">Release</string>
7174
<string name="mcl_setting_veroption_snapshot">Snapshot</string>
@@ -90,6 +93,7 @@
9093
<string name="global_select">Select</string>
9194
<string name="global_retry">Retry</string>
9295
<string name="global_default">Default</string>
96+
<string name="global_off">Off</string>
9397

9498
<!-- MainActivity: strings -->
9599
<string name="mcn_exit_title">Application/Game exited with code %d, check latestlog.txt for more details.</string>
@@ -431,4 +435,14 @@
431435
<string name="bta_installer_nightly_versions">Nightly BTA versions</string>
432436
<string name="newdl_extracting_native_libraries">Extracting native libraries (%d/%d)</string>
433437
<string name="toast_not_available_demo">This is not available in demo mode</string>
434-
</resources>
438+
439+
<string name="preference_renderer_mobileglues_settings">MobileGlues Renderer Settings</string>
440+
<string name="mg_renderer_glsl_cache">Max GLSL cache size</string>
441+
<string name="mg_renderer_angle">Use ANGLE as driver</string>
442+
<string name="mg_renderer_multidraw">Multidraw emulation mode</string>
443+
<string name="mg_renderer_title_gl43emu">Enable incomplete OpenGL 4.3 emulation</string>
444+
<string name="mg_renderer_summary_gl43emu">May help with mod crashes. Disable if not needed, can cause crashes.</string>
445+
<string name="mg_renderer_title_computeShaderemu">Enable Compute Shader emulation</string>
446+
<string name="mg_renderer_summary_computeShaderemu">May help with shaderpack glitches. Disable if not needed, can cause crashes.</string>
447+
<string name="mg_renderer_title_errorSetting">Error Filtering</string>
448+
</resources>

app_pojavlauncher/src/main/res/xml/pref_main.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
android:icon="@drawable/ic_setting_video"
2222
/>
2323

24+
2425
<Preference
2526
android:key="control_screen_setting"
2627
android:title="@string/preference_control_title"
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app2="http://schemas.android.com/apk/res-auto">
4+
5+
<net.kdt.pojavlaunch.prefs.BackButtonPreference/>
6+
7+
<PreferenceCategory android:title="@string/preference_renderer_mobileglues_settings" android:icon="@drawable/ic_mg_renderer">
8+
<EditTextPreference
9+
android:title="@string/mg_renderer_glsl_cache"
10+
android:key="mg_renderer_setting_glsl_cache_size"
11+
android:inputType="number"
12+
android:defaultValue="2048"
13+
/>
14+
<androidx.preference.ListPreference
15+
android:title="@string/mg_renderer_angle"
16+
android:key="mg_renderer_setting_angle"
17+
android:defaultValue="1"
18+
android:entries="@array/mg_renderer_names_angle"
19+
android:entryValues="@array/mg_renderer_values_angle"
20+
app2:useSimpleSummaryProvider="true"/>
21+
<androidx.preference.ListPreference
22+
android:title="@string/mg_renderer_multidraw"
23+
android:key="mg_renderer_setting_multidraw"
24+
android:defaultValue="0"
25+
android:entries="@array/mg_renderer_names_multidraw"
26+
android:entryValues="@array/mg_renderer_values_multidraw"
27+
app2:useSimpleSummaryProvider="true"/>
28+
<androidx.preference.ListPreference
29+
android:title="@string/mg_renderer_title_errorSetting"
30+
android:key="mg_renderer_setting_errorSetting"
31+
android:defaultValue="0"
32+
android:entries="@array/mg_renderer_names_errorSetting"
33+
android:entryValues="@array/mg_renderer_values_errorSetting"
34+
app2:useSimpleSummaryProvider="true"/>
35+
<PreferenceCategory android:title="@string/preference_experimental_title">
36+
<SwitchPreference
37+
android:title="@string/mg_renderer_title_gl43emu"
38+
android:summary="@string/mg_renderer_summary_gl43emu"
39+
android:key="mg_renderer_setting_gl43emu"
40+
android:defaultValue="false"
41+
/>
42+
<SwitchPreference
43+
android:title="@string/mg_renderer_title_computeShaderemu"
44+
android:summary="@string/mg_renderer_summary_computeShaderemu"
45+
android:key="mg_renderer_computeShaderemu"
46+
android:defaultValue="false"
47+
/>
48+
</PreferenceCategory>
49+
</PreferenceCategory>
50+
</PreferenceScreen>

0 commit comments

Comments
 (0)