diff --git a/MobileGlues b/MobileGlues
index 0b41cd6a3..44f5dd9d7 160000
--- a/MobileGlues
+++ b/MobileGlues
@@ -1 +1 @@
-Subproject commit 0b41cd6a387989b2e7ce4a05cf4f7c9f7f027b38
+Subproject commit 44f5dd9d7cb03c4e87b48c2144b40445d8dd7d38
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 a87316069..f35eb39f9 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java
@@ -356,7 +356,6 @@ public class MainActivity extends BaseActivity implements ControlButtonMenuListe
}
private void runCraft(String versionId, JMinecraftVersionList.Version version) throws Throwable {
- LauncherPreferences.writeMGRendererSettings(); // No MG detection for you
if(Tools.LOCAL_RENDERER == null) {
Tools.LOCAL_RENDERER = LauncherPreferences.PREF_RENDERER;
}
@@ -370,6 +369,9 @@ public class MainActivity extends BaseActivity implements ControlButtonMenuListe
MinecraftAccount minecraftAccount = PojavProfile.getCurrentProfileContent(this, null);
Logger.appendToLog("--------- Starting game with Launcher Debug!");
Tools.printLauncherInfo(versionId, Tools.isValidString(minecraftProfile.javaArgs) ? minecraftProfile.javaArgs : LauncherPreferences.PREF_CUSTOM_JAVA_ARGS);
+ if(Tools.LOCAL_RENDERER.equals("opengles_mobileglues")) {
+ LauncherPreferences.writeMGRendererSettings();
+ }
JREUtils.redirectAndPrintJRELog();
LauncherProfiles.load();
int requiredJavaVersion = 8;
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 d6dfc112b..1b06c7542 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
@@ -235,12 +235,16 @@ public class LauncherPreferences {
// These guys are SwitchPreferences so they get special treatment, they need to be converted to ints
int gl43exts = DEFAULT_PREF.getBoolean("mg_renderer_setting_gl43ext", false) ? 1 : 0;
int computeShaderext = DEFAULT_PREF.getBoolean("mg_renderer_computeShaderext", false) ? 1 : 0;
+ int angleDepthClearFixMode = DEFAULT_PREF.getBoolean("mg_renderer_setting_angleDepthClearFixMode", false) ? 1 : 0;
+ int timerQueryExt = DEFAULT_PREF.getBoolean("mg_renderer_setting_timerQueryExt", false) ? 1 : 0;
MGConfigJson.put("enableExtGL43", gl43exts);
MGConfigJson.put("enableExtComputeShader", computeShaderext);
-
- MGConfigJson.put("enableCompatibleMode", Integer.parseInt(DEFAULT_PREF.getString("", "0"))); // Placeholder, doesn't do anything on current MG
- MGConfigJson.put("multidrawMode", Integer.parseInt(DEFAULT_PREF.getString("mg_renderer_setting_multidraw", "0")));
- MGConfigJson.put("maxGlslCacheSize", Integer.parseInt(DEFAULT_PREF.getString("mg_renderer_setting_glsl_cache_size", "2048")));
+ MGConfigJson.put("angleDepthClearFixMode", angleDepthClearFixMode);
+ MGConfigJson.put("timerQueryExt", timerQueryExt);
+ if (DEFAULT_PREF.getBoolean("mg_renderer_multidrawCompute", false)) {
+ MGConfigJson.put("multidrawMode", 5); // Special handling for the (special mayhaps) compute emulation
+ } else MGConfigJson.put("multidrawMode", Integer.parseInt(DEFAULT_PREF.getString("mg_renderer_setting_multidraw", "0")));
+ MGConfigJson.put("maxGlslCacheSize", Integer.parseInt(DEFAULT_PREF.getString("mg_renderer_setting_glsl_cache_size", "128")));
File configFile = new File(Tools.DIR_DATA + "/MobileGlues", "config.json");
FileUtils.ensureParentDirectory(configFile);
try {
diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceRendererSettingsFragment.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceRendererSettingsFragment.java
index 57918b5a1..63a25e543 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceRendererSettingsFragment.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceRendererSettingsFragment.java
@@ -7,10 +7,10 @@ import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
-import androidx.annotation.NonNull;
import androidx.preference.EditTextPreference;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
+import androidx.preference.SwitchPreference;
import net.kdt.pojavlaunch.R;
@@ -18,10 +18,16 @@ import java.util.Objects;
public class LauncherPreferenceRendererSettingsFragment extends LauncherPreferenceFragment {
EditTextPreference GLSLCachePreference;
+ ListPreference MultiDrawEmulationPreference;
+ SwitchPreference ComputeMultiDrawPreference;
+ Preference.SummaryProvider MultiDrawSummaryProvider;
+
@Override
public void onCreatePreferences(Bundle b, String str) {
addPreferencesFromResource(R.xml.pref_renderer);
GLSLCachePreference = findPreference("mg_renderer_setting_glsl_cache_size");
+ ComputeMultiDrawPreference = findPreference("mg_renderer_multidrawCompute");
+ MultiDrawEmulationPreference = findPreference("mg_renderer_setting_multidraw");
GLSLCachePreference.setOnBindEditTextListener((editText) -> {
editText.setInputType(TYPE_CLASS_NUMBER);
editText.addTextChangedListener(new TextWatcher() {
@@ -29,18 +35,20 @@ public class LauncherPreferenceRendererSettingsFragment extends LauncherPreferen
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
// Nothing, its boilerplate
}
+
@Override
public void afterTextChanged(Editable editable) {
// Nothing, its boilerplate
}
+
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
// This is just to handle the summary not updating when its above max int value
// Horrible I know.
- if (editText.getText().toString().isEmpty()){
+ if (editText.getText().toString().isEmpty()) {
editText.setText("0");
}
- if (Long.parseLong(editText.getText().toString()) > Integer.MAX_VALUE){
+ if (Long.parseLong(editText.getText().toString()) > Integer.MAX_VALUE) {
editText.setError("Too big! Setting to maximum value");
editText.setText(String.valueOf(Integer.MAX_VALUE));
}
@@ -49,12 +57,30 @@ public class LauncherPreferenceRendererSettingsFragment extends LauncherPreferen
});
});
updateGLSLCacheSummary(); // Just updates the summary with the value when user opens the menu. Yes it's out of place.
+ updateMultiDrawSummary(); // Same as above
}
@Override
public void onSharedPreferenceChanged(SharedPreferences p, String s) {
GLSLCachePreference = findPreference("mg_renderer_setting_glsl_cache_size");
updateGLSLCacheSummary();
+ updateMultiDrawSummary();
+ }
+
+ private void updateMultiDrawSummary() {
+ if (MultiDrawEmulationPreference != null) {
+ if (MultiDrawEmulationPreference.getSummaryProvider() != null) {
+ MultiDrawSummaryProvider = MultiDrawEmulationPreference.getSummaryProvider();
+ }
+ if (ComputeMultiDrawPreference.isChecked()) {
+ MultiDrawEmulationPreference.setEnabled(false);
+ MultiDrawEmulationPreference.setSummaryProvider(null);
+ MultiDrawEmulationPreference.setSummary("(Experimental) Compute");
+ } else if (MultiDrawEmulationPreference != null) {
+ MultiDrawEmulationPreference.setEnabled(true);
+ MultiDrawEmulationPreference.setSummaryProvider(MultiDrawSummaryProvider);
+ }
+ }
}
private void updateGLSLCacheSummary() {
@@ -62,6 +88,8 @@ public class LauncherPreferenceRendererSettingsFragment extends LauncherPreferen
if (Objects.equals(Objects.requireNonNull(this.GLSLCachePreference).getText(), "") || Integer.parseInt(Objects.requireNonNull(this.GLSLCachePreference.getText())) == 0) {
this.GLSLCachePreference.setSummary(getString(R.string.global_off));
} else this.GLSLCachePreference.setSummary(this.GLSLCachePreference.getText() + " MB");
- } catch (Exception e){ e.printStackTrace(); }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
}
diff --git a/app_pojavlauncher/src/main/res/values/strings.xml b/app_pojavlauncher/src/main/res/values/strings.xml
index 874252e46..8ff87f43f 100644
--- a/app_pojavlauncher/src/main/res/values/strings.xml
+++ b/app_pojavlauncher/src/main/res/values/strings.xml
@@ -205,7 +205,6 @@
Java Runtimes, JVM Arguments, RAM amount and sandbox
Miscellaneous settings
Version list and libraries check
- Experimental Stuff
Use things there with consideration, no support
Enable sustained performance mode
Limit thermal throttling by limiting peak performance.
@@ -439,11 +438,19 @@
Max GLSL cache size
Use ANGLE as driver
Multidraw emulation mode
+ Error Filtering
+ Disable GPU Utilization in F3 menu
+ Fixes random crashes when F3 is open on some Mali devices
+ ANGLE Only Options
+ Fix hand and held items from going through blocks
+ Only affects ANGLE, can affect performance.
+ Experimental Stuff
Advertise Experimental OpenGL 4.3 extensions
May help with mod crashes. Disable if not needed, can cause crashes.
Advertise Experimental Compute Shader extension
May help with shaderpack glitches. Disable if not needed, can cause crashes.
- Error Filtering
+ Use Compute Multidraw Emulation
+ Uses compute shaders for multidraw emulation
Amethyst
Only Vanilla 1.3.1 and above are supported on demo accounts
Demo Profile not supported
diff --git a/app_pojavlauncher/src/main/res/xml/pref_renderer.xml b/app_pojavlauncher/src/main/res/xml/pref_renderer.xml
index fbb8e5a13..eeb836d72 100644
--- a/app_pojavlauncher/src/main/res/xml/pref_renderer.xml
+++ b/app_pojavlauncher/src/main/res/xml/pref_renderer.xml
@@ -9,8 +9,7 @@
android:title="@string/mg_renderer_glsl_cache"
android:key="mg_renderer_setting_glsl_cache_size"
android:inputType="number"
- android:defaultValue="2048"
- />
+ android:defaultValue="128" />
+
+
+
+
+ android:defaultValue="false" />
+ android:defaultValue="false" />
+