mirror of
https://github.com/AngelAuraMC/Amethyst-Android.git
synced 2025-09-14 07:05:40 -04:00
Feat[renderer]: compatibility checking + multiarch binaries
This commit is contained in:
parent
cc84e8a754
commit
ce87be9f4e
@ -320,12 +320,16 @@ public class MainActivity extends BaseActivity implements ControlButtonMenuListe
|
||||
if(Tools.LOCAL_RENDERER == null) {
|
||||
Tools.LOCAL_RENDERER = LauncherPreferences.PREF_RENDERER;
|
||||
}
|
||||
if(!Tools.checkRendererCompatible(this, Tools.LOCAL_RENDERER)) {
|
||||
Tools.RenderersList renderersList = Tools.getCompatibleRenderers(this);
|
||||
String firstCompatibleRenderer = renderersList.rendererIds.get(0);
|
||||
Log.w("runCraft","Incompatible renderer "+Tools.LOCAL_RENDERER+ " will be replaced with "+firstCompatibleRenderer);
|
||||
Tools.LOCAL_RENDERER = firstCompatibleRenderer;
|
||||
Tools.releaseRenderersCache();
|
||||
}
|
||||
MinecraftAccount minecraftAccount = PojavProfile.getCurrentProfileContent(this, null);
|
||||
Logger.appendToLog("--------- beginning with launcher debug");
|
||||
printLauncherInfo(versionId, Tools.isValidString(minecraftProfile.javaArgs) ? minecraftProfile.javaArgs : LauncherPreferences.PREF_CUSTOM_JAVA_ARGS);
|
||||
if (Tools.LOCAL_RENDERER.equals("vulkan_zink")) {
|
||||
checkVulkanZinkIsSupported();
|
||||
}
|
||||
JREUtils.redirectAndPrintJRELog();
|
||||
LauncherProfiles.load();
|
||||
int requiredJavaVersion = 8;
|
||||
|
@ -16,7 +16,9 @@ import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
@ -39,6 +41,7 @@ import android.widget.Toast;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.app.NotificationManagerCompat;
|
||||
import androidx.core.content.res.TypedArrayUtils;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
@ -116,6 +119,7 @@ public final class Tools {
|
||||
public static String CTRLMAP_PATH;
|
||||
public static String CTRLDEF_FILE;
|
||||
public static final int RUN_MOD_INSTALLER = 2050;
|
||||
private static RenderersList sCompatibleRenderers;
|
||||
|
||||
|
||||
private static File getPojavStorageRoot(Context ctx) {
|
||||
@ -1076,4 +1080,56 @@ public final class Tools {
|
||||
t.measure(widthMeasureSpec, heightMeasureSpec);
|
||||
return t.getMeasuredHeight();
|
||||
}
|
||||
|
||||
public static class RenderersList {
|
||||
public final List<String> rendererIds;
|
||||
public final String[] rendererDisplayNames;
|
||||
|
||||
public RenderersList(List<String> rendererIds, String[] rendererDisplayNames) {
|
||||
this.rendererIds = rendererIds;
|
||||
this.rendererDisplayNames = rendererDisplayNames;
|
||||
}
|
||||
}
|
||||
|
||||
/** Return the renderers that are compatible with this device */
|
||||
public static RenderersList getCompatibleRenderers(Context context) {
|
||||
if(sCompatibleRenderers != null) return sCompatibleRenderers;
|
||||
Resources resources = context.getResources();
|
||||
String[] defaultRenderers = resources.getStringArray(R.array.renderer_values);
|
||||
String[] defaultRendererNames = resources.getStringArray(R.array.renderer);
|
||||
PackageManager packageManager = context.getPackageManager();
|
||||
boolean deviceHasVulkan;
|
||||
if (SDK_INT >= Build.VERSION_CODES.N) {
|
||||
deviceHasVulkan = packageManager.hasSystemFeature(PackageManager.FEATURE_VULKAN_HARDWARE_LEVEL) &&
|
||||
packageManager.hasSystemFeature(PackageManager.FEATURE_VULKAN_HARDWARE_VERSION);
|
||||
}else{
|
||||
deviceHasVulkan = false;
|
||||
}
|
||||
// Currently, only 32-bit x86 does not have the Zink binary
|
||||
boolean deviceHasZinkBinary = !(Architecture.is32BitsDevice() && Architecture.isx86Device());
|
||||
List<String> rendererIds = new ArrayList<>(defaultRenderers.length);
|
||||
List<String> rendererNames = new ArrayList<>(defaultRendererNames.length);
|
||||
for(int i = 0; i < defaultRenderers.length; i++) {
|
||||
String rendererId = defaultRenderers[i];
|
||||
if(rendererId.contains("vulkan") && !deviceHasVulkan) continue;
|
||||
if(rendererId.contains("zink") && !deviceHasZinkBinary) continue;
|
||||
rendererIds.add(rendererId);
|
||||
rendererNames.add(defaultRendererNames[i]);
|
||||
}
|
||||
sCompatibleRenderers = new RenderersList(rendererIds,
|
||||
rendererNames.toArray(new String[0]));
|
||||
|
||||
return sCompatibleRenderers;
|
||||
}
|
||||
|
||||
/** Checks if the renderer Id is compatible with the current device */
|
||||
public static boolean checkRendererCompatible(Context context, String rendererName) {
|
||||
return getCompatibleRenderers(context).rendererIds.contains(rendererName);
|
||||
}
|
||||
|
||||
/** Releases the cache of compatible renderers. */
|
||||
public static void releaseRenderersCache() {
|
||||
sCompatibleRenderers = null;
|
||||
System.gc();
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,6 @@ import net.kdt.pojavlaunch.value.launcherprofiles.MinecraftProfile;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class ProfileEditorFragment extends Fragment {
|
||||
@ -67,13 +66,13 @@ public class ProfileEditorFragment extends Fragment {
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
mRenderNames = Arrays.asList(getResources().getStringArray(R.array.renderer_values));
|
||||
bindViews(view);
|
||||
|
||||
// Renderer spinner
|
||||
List<String> renderList = new ArrayList<>(5);
|
||||
Collections.addAll(renderList, getResources().getStringArray(R.array.renderer));
|
||||
renderList.add("Default");
|
||||
Tools.RenderersList renderersList = Tools.getCompatibleRenderers(view.getContext());
|
||||
mRenderNames = renderersList.rendererIds;
|
||||
List<String> renderList = new ArrayList<>(renderersList.rendererDisplayNames.length + 1);
|
||||
renderList.addAll(Arrays.asList(renderersList.rendererDisplayNames));
|
||||
renderList.add(view.getContext().getString(R.string.global_default));
|
||||
mDefaultRenderer.setAdapter(new ArrayAdapter<>(getContext(), R.layout.item_simple_list_1, renderList));
|
||||
|
||||
// Set up behaviors
|
||||
|
@ -6,10 +6,12 @@ import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.SwitchPreference;
|
||||
import androidx.preference.SwitchPreferenceCompat;
|
||||
|
||||
import net.kdt.pojavlaunch.R;
|
||||
import net.kdt.pojavlaunch.Tools;
|
||||
import net.kdt.pojavlaunch.prefs.CustomSeekBarPreference;
|
||||
import net.kdt.pojavlaunch.prefs.LauncherPreferences;
|
||||
|
||||
@ -36,6 +38,12 @@ public class LauncherPreferenceVideoFragment extends LauncherPreferenceFragment
|
||||
// Sustained performance is only available since Nougat
|
||||
SwitchPreference sustainedPerfSwitch = findPreference("sustainedPerformance");
|
||||
sustainedPerfSwitch.setVisible(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N);
|
||||
|
||||
ListPreference rendererListPreference = findPreference("renderer");
|
||||
Tools.RenderersList renderersList = Tools.getCompatibleRenderers(getContext());
|
||||
rendererListPreference.setEntries(renderersList.rendererDisplayNames);
|
||||
rendererListPreference.setEntryValues(renderersList.rendererIds.toArray(new String[0]));
|
||||
|
||||
computeVisibility();
|
||||
}
|
||||
|
||||
|
BIN
app_pojavlauncher/src/main/jniLibs/arm64-v8a/libOSMesa.so
Executable file → Normal file
BIN
app_pojavlauncher/src/main/jniLibs/arm64-v8a/libOSMesa.so
Executable file → Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -127,6 +127,7 @@
|
||||
<string name="global_waiting">Wait</string>
|
||||
<string name="global_select">Select</string>
|
||||
<string name="global_retry">Retry</string>
|
||||
<string name="global_default">Default</string>
|
||||
|
||||
<!-- MainActivity: strings -->
|
||||
<string name="mcn_exit_title">Application/Game exited with code %d, check latestlog.txt for more details.</string>
|
||||
|
@ -9,8 +9,6 @@
|
||||
android:title="@string/mcl_setting_category_renderer"
|
||||
android:key="renderer"
|
||||
android:defaultValue="opengles2"
|
||||
android:entries="@array/renderer"
|
||||
android:entryValues="@array/renderer_values"
|
||||
android:icon="@drawable/ic_setting_engine"
|
||||
app2:useSimpleSummaryProvider="true"/>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user