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

Commit 0846298

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 4d7b3f4 commit 0846298

File tree

12 files changed

+233
-4
lines changed

12 files changed

+233
-4
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("enabledAngle", 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(String.valueOf("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"

0 commit comments

Comments
 (0)