mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-23 07:44:18 +00:00
Compare commits
13 commits
3f01ada4c8
...
13b14f4cb1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
13b14f4cb1 | ||
|
|
f18844114b | ||
|
|
5ca104bda1 | ||
|
|
8f822af894 | ||
|
|
f30a8daf88 | ||
|
|
a0bb6324c0 | ||
|
|
3a823de605 | ||
|
|
0257a8d491 | ||
|
|
6c76908ddb | ||
|
|
e6ad51e3d5 | ||
|
|
f11b69d6b7 | ||
|
|
27cadb24f3 | ||
|
|
a7ef19e028 |
651
dist/languages/ar.ts
vendored
651
dist/languages/ar.ts
vendored
File diff suppressed because it is too large
Load diff
606
dist/languages/ca.ts
vendored
606
dist/languages/ca.ts
vendored
File diff suppressed because it is too large
Load diff
610
dist/languages/cs.ts
vendored
610
dist/languages/cs.ts
vendored
File diff suppressed because it is too large
Load diff
610
dist/languages/da.ts
vendored
610
dist/languages/da.ts
vendored
File diff suppressed because it is too large
Load diff
606
dist/languages/de.ts
vendored
606
dist/languages/de.ts
vendored
File diff suppressed because it is too large
Load diff
610
dist/languages/el.ts
vendored
610
dist/languages/el.ts
vendored
File diff suppressed because it is too large
Load diff
647
dist/languages/es.ts
vendored
647
dist/languages/es.ts
vendored
File diff suppressed because it is too large
Load diff
610
dist/languages/fi.ts
vendored
610
dist/languages/fi.ts
vendored
File diff suppressed because it is too large
Load diff
610
dist/languages/fr.ts
vendored
610
dist/languages/fr.ts
vendored
File diff suppressed because it is too large
Load diff
606
dist/languages/hu.ts
vendored
606
dist/languages/hu.ts
vendored
File diff suppressed because it is too large
Load diff
737
dist/languages/id.ts
vendored
737
dist/languages/id.ts
vendored
File diff suppressed because it is too large
Load diff
610
dist/languages/it.ts
vendored
610
dist/languages/it.ts
vendored
File diff suppressed because it is too large
Load diff
606
dist/languages/ja_JP.ts
vendored
606
dist/languages/ja_JP.ts
vendored
File diff suppressed because it is too large
Load diff
610
dist/languages/ko_KR.ts
vendored
610
dist/languages/ko_KR.ts
vendored
File diff suppressed because it is too large
Load diff
608
dist/languages/nb.ts
vendored
608
dist/languages/nb.ts
vendored
File diff suppressed because it is too large
Load diff
610
dist/languages/nl.ts
vendored
610
dist/languages/nl.ts
vendored
File diff suppressed because it is too large
Load diff
610
dist/languages/pl.ts
vendored
610
dist/languages/pl.ts
vendored
File diff suppressed because it is too large
Load diff
610
dist/languages/pt_BR.ts
vendored
610
dist/languages/pt_BR.ts
vendored
File diff suppressed because it is too large
Load diff
606
dist/languages/pt_PT.ts
vendored
606
dist/languages/pt_PT.ts
vendored
File diff suppressed because it is too large
Load diff
610
dist/languages/ru_RU.ts
vendored
610
dist/languages/ru_RU.ts
vendored
File diff suppressed because it is too large
Load diff
611
dist/languages/sv.ts
vendored
611
dist/languages/sv.ts
vendored
File diff suppressed because it is too large
Load diff
610
dist/languages/tr_TR.ts
vendored
610
dist/languages/tr_TR.ts
vendored
File diff suppressed because it is too large
Load diff
611
dist/languages/uk.ts
vendored
611
dist/languages/uk.ts
vendored
File diff suppressed because it is too large
Load diff
610
dist/languages/vi.ts
vendored
610
dist/languages/vi.ts
vendored
File diff suppressed because it is too large
Load diff
610
dist/languages/vi_VN.ts
vendored
610
dist/languages/vi_VN.ts
vendored
File diff suppressed because it is too large
Load diff
610
dist/languages/zh_CN.ts
vendored
610
dist/languages/zh_CN.ts
vendored
File diff suppressed because it is too large
Load diff
606
dist/languages/zh_TW.ts
vendored
606
dist/languages/zh_TW.ts
vendored
File diff suppressed because it is too large
Load diff
|
|
@ -17,6 +17,7 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting {
|
|||
USE_CUSTOM_CPU_TICKS("use_custom_cpu_ticks"),
|
||||
SKIP_CPU_INNER_INVALIDATION("skip_cpu_inner_invalidation"),
|
||||
FIX_BLOOM_EFFECTS("fix_bloom_effects"),
|
||||
RESCALE_HACK("rescale_hack"),
|
||||
CPUOPT_UNSAFE_HOST_MMU("cpuopt_unsafe_host_mmu"),
|
||||
USE_DOCKED_MODE("use_docked_mode"),
|
||||
USE_AUTO_STUB("use_auto_stub"),
|
||||
|
|
|
|||
|
|
@ -756,6 +756,13 @@ abstract class SettingsItem(
|
|||
descriptionId = R.string.fix_bloom_effects_description
|
||||
)
|
||||
)
|
||||
put(
|
||||
SwitchSetting(
|
||||
BooleanSetting.RESCALE_HACK,
|
||||
titleId = R.string.rescale_hack,
|
||||
descriptionId = R.string.rescale_hack_description
|
||||
)
|
||||
)
|
||||
put(
|
||||
SwitchSetting(
|
||||
BooleanSetting.CPUOPT_UNSAFE_HOST_MMU,
|
||||
|
|
|
|||
|
|
@ -284,8 +284,6 @@ class SettingsFragmentPresenter(
|
|||
add(BooleanSetting.SYNC_MEMORY_OPERATIONS.key)
|
||||
add(BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE.key)
|
||||
add(BooleanSetting.RENDERER_FORCE_MAX_CLOCK.key)
|
||||
add(BooleanSetting.RENDERER_ASYNCHRONOUS_GPU_EMULATION.key)
|
||||
add(BooleanSetting.RENDERER_ASYNC_PRESENTATION.key)
|
||||
add(BooleanSetting.RENDERER_REACTIVE_FLUSHING.key)
|
||||
add(BooleanSetting.ENABLE_BUFFER_HISTORY.key)
|
||||
add(BooleanSetting.USE_OPTIMIZED_VERTEX_BUFFERS.key)
|
||||
|
|
@ -295,7 +293,10 @@ class SettingsFragmentPresenter(
|
|||
add(IntSetting.FAST_GPU_TIME.key)
|
||||
add(BooleanSetting.SKIP_CPU_INNER_INVALIDATION.key)
|
||||
add(BooleanSetting.FIX_BLOOM_EFFECTS.key)
|
||||
add(BooleanSetting.RESCALE_HACK.key)
|
||||
add(BooleanSetting.RENDERER_ASYNCHRONOUS_SHADERS.key)
|
||||
add(BooleanSetting.RENDERER_ASYNCHRONOUS_GPU_EMULATION.key)
|
||||
add(BooleanSetting.RENDERER_ASYNC_PRESENTATION.key)
|
||||
add(SettingsItem.GPU_UNSWIZZLE_COMBINED)
|
||||
|
||||
add(HeaderSetting(R.string.extensions))
|
||||
|
|
|
|||
|
|
@ -291,13 +291,23 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
|||
// Game launched via intent (check for existing custom config)
|
||||
intentGame != null -> {
|
||||
game?.let { gameInstance ->
|
||||
runCatching { GameHelper.restoreContentForGame(gameInstance) }
|
||||
.onFailure {
|
||||
Log.warning(
|
||||
"[EmulationFragment] Failed to restore content for intent launch: ${it.message}"
|
||||
)
|
||||
}
|
||||
|
||||
val customConfigFile = SettingsFile.getCustomSettingsFile(gameInstance)
|
||||
if (customConfigFile.exists()) {
|
||||
shouldUseCustom = true
|
||||
Log.info(
|
||||
"[EmulationFragment] Found existing custom settings for ${gameInstance.title}, loading them"
|
||||
)
|
||||
SettingsFile.loadCustomConfig(gameInstance)
|
||||
NativeConfig.unloadPerGameConfig()
|
||||
} else {
|
||||
shouldUseCustom = false
|
||||
Log.info(
|
||||
"[EmulationFragment] No custom settings found for ${gameInstance.title}, using global settings"
|
||||
)
|
||||
|
|
@ -871,7 +881,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
|||
if (drawerView == binding.quickSettingsSheet) {
|
||||
isQuickSettingsMenuOpen = true
|
||||
if (shouldUseCustom) {
|
||||
SettingsFile.loadCustomConfig(args.game!!)
|
||||
SettingsFile.loadCustomConfig(game!!)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2499,7 +2509,6 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
|||
|
||||
fun toggleOverlay(enable: Boolean) {
|
||||
if (!isAdded || _binding == null) return
|
||||
if (enable && hasPhysicalControllerConnected && !args.overlayGamelessEditMode) return
|
||||
if (enable == !BooleanSetting.SHOW_INPUT_OVERLAY.getBoolean()) {
|
||||
// Reset controller input flag so controller can hide overlay again
|
||||
if (!enable) {
|
||||
|
|
@ -2537,7 +2546,8 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
|||
if (binding.surfaceInputOverlay.isGamelessMode()) return
|
||||
|
||||
if (hasConnectedControllers) {
|
||||
if (BooleanSetting.SHOW_INPUT_OVERLAY.getBoolean()) {
|
||||
if (BooleanSetting.SHOW_INPUT_OVERLAY.getBoolean() &&
|
||||
BooleanSetting.HIDE_OVERLAY_ON_CONTROLLER_INPUT.getBoolean()) {
|
||||
overlayHiddenByPhysicalController = true
|
||||
toggleOverlay(false)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ namespace AndroidSettings {
|
|||
Settings::Setting<u32> input_overlay_auto_hide{linkage, 5, "input_overlay_auto_hide",
|
||||
Settings::Category::Overlay,
|
||||
Settings::Specialization::Default, true, true, &enable_input_overlay_auto_hide};
|
||||
Settings::Setting<bool> hide_overlay_on_controller_input{linkage, false,
|
||||
Settings::Setting<bool> hide_overlay_on_controller_input{linkage, true,
|
||||
"hide_overlay_on_controller_input",
|
||||
Settings::Category::Overlay,
|
||||
Settings::Specialization::Default, true,
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
<string name="hide_overlay_on_controller_input">إخفاء الطبقة عند إدخال ذراع التحكم</string>
|
||||
<string name="hide_overlay_on_controller_input_description">إخفاء تلقائي لطبقة عناصر التحكم باللمس عند استخدام ذراع تحكم فعلية. تظهر الطبقة مرة أخرى عند فصل ذراع التحكم.</string>
|
||||
<string name="invert_confirm_back_controller_buttons">عكس أزرار التأكيد/الرجوع في وحدة التحكم</string>
|
||||
<string name="invert_confirm_back_controller_buttons_description">قم بتبديل طريقة عمل زري التأكيد والرجوع في نظام Android لتتوافق مع أنماط Switch و Xbox أثناء استخدام واجهة المستخدم الخاصة بالتطبيق.</string>
|
||||
<string name="invert_confirm_back_controller_buttons_description">تبديل طريقة التعامل مع زري «تأكيد» و«رجوع» في نظام Android لتتوافق مع أنماط أجهزة Switch وXbox أثناء استخدام واجهة المستخدم الخاصة بالتطبيق.</string>
|
||||
|
||||
<string name="input_overlay_options">طبقة الإدخال</string>
|
||||
<string name="input_overlay_options_description">ضبط ذراع التحكم على الشاشة</string>
|
||||
|
|
@ -268,7 +268,7 @@
|
|||
<string name="product">المنتج</string>
|
||||
<string name="android_version">إصدار Android</string>
|
||||
<string name="android_security_patch">تصحيح الأمان</string>
|
||||
<string name="build_id">معرف البناء</string>
|
||||
<string name="build_id">معرف الإصدار</string>
|
||||
<string name="general_information">معلومات عامة</string>
|
||||
<string name="hardware">الأجهزة</string>
|
||||
<string name="supported_abis">واجهات برمجة التطبيقات المدعومة</string>
|
||||
|
|
@ -403,7 +403,7 @@
|
|||
<string name="contributors">المساهمين</string>
|
||||
<string name="contributors_description">الأشخاص الذين جعلوا تطبيق Eden لنظام Android ممكنًا</string>
|
||||
<string name="licenses_description">المشاريع التي تجعل Eden لأجهزة Android ممكنة</string>
|
||||
<string name="build">البناء</string>
|
||||
<string name="build">الإصدار</string>
|
||||
<string name="user_data">بيانات المستخدم</string>
|
||||
<string name="user_data_description">استيراد/تصدير جميع بيانات التطبيق.\nعند استيراد بيانات المستخدم، سيتم حذف جميع بيانات المستخدم الموجودة!\nقد يُسبب استيراد البيانات من Citron بعض المشاكل. يُنصح باستيراد جميع البيانات المطلوبة يدويًا.</string>
|
||||
<string name="exporting_user_data">جارٍ تصدير بيانات المستخدم...</string>
|
||||
|
|
@ -631,10 +631,10 @@
|
|||
<string name="gamecube_controller">ذراع تحكم GameCube</string>
|
||||
<string name="invert_axis">عكس المحور</string>
|
||||
<string name="invert_button">عكس الزر</string>
|
||||
<string name="toggle_button">زر التبديل</string>
|
||||
<string name="toggle_button">زر تشغيل/إيقاف</string>
|
||||
<string name="turbo_button">زر التوربو</string>
|
||||
<string name="set_threshold">تعيين الحد الفاصل</string>
|
||||
<string name="toggle_axis">تبديل المحور</string>
|
||||
<string name="toggle_axis">تشغيل/إيقاف المحور</string>
|
||||
<string name="connected">متصل</string>
|
||||
<string name="use_system_vibrator">استخدم هزاز النظام</string>
|
||||
<string name="input_overlay">طبقة الإدخال</string>
|
||||
|
|
@ -660,7 +660,7 @@
|
|||
|
||||
<!-- Miscellaneous -->
|
||||
<string name="slider_default">افتراضي</string>
|
||||
<string name="default_string">الافتراضي</string>
|
||||
<string name="default_string">افتراضي</string>
|
||||
<string name="loading">جارٍ التحميل…</string>
|
||||
<string name="shutting_down">جارٍ إيقاف التشغيل...</string>
|
||||
<string name="reset_setting_confirmation">هل تريد إعادة تعيين هذا الإعداد إلى قيمته الافتراضية؟</string>
|
||||
|
|
@ -878,13 +878,13 @@
|
|||
<!-- Emulation Menu -->
|
||||
<string name="emulation_exit">خروج من المحاكاة</string>
|
||||
<string name="emulation_done">إنهاء</string>
|
||||
<string name="emulation_toggle_controls">تبديل أزرار التحكم</string>
|
||||
<string name="emulation_toggle_controls">تشغيل/إيقاف أزرار التحكم</string>
|
||||
<string name="emulation_rel_stick_center">مركز العصا النسبي</string>
|
||||
<string name="emulation_dpad_slide">انزلاق الأسهم</string>
|
||||
<string name="emulation_haptics">الاهتزازات الديناميكية</string>
|
||||
<string name="emulation_show_overlay">عرض ذراع التحكم</string>
|
||||
<string name="emulation_hide_overlay">إخفاء ذراع التحكم</string>
|
||||
<string name="emulation_toggle_all">تبديل الكل</string>
|
||||
<string name="emulation_toggle_all">تشغيل/إيقاف الكل</string>
|
||||
<string name="emulation_control_adjust">ضبط الطبقة</string>
|
||||
<string name="emulation_control_scale">الحجم</string>
|
||||
<string name="emulation_control_opacity">الشفافية</string>
|
||||
|
|
|
|||
|
|
@ -272,7 +272,7 @@
|
|||
<string name="general_information">Información general</string>
|
||||
<string name="hardware">Hardware</string>
|
||||
<string name="supported_abis">ABIs soportadas</string>
|
||||
<string name="cpu_info">Información de la CPU</string>
|
||||
<string name="cpu_info">Información del procesador</string>
|
||||
<string name="gpu_information">Información de la GPU</string>
|
||||
<string name="vulkan_driver_version">Versión del controlador de Vulkan</string>
|
||||
<string name="error_getting_emulator_info">Error al obtener la información del emulador</string>
|
||||
|
|
@ -416,8 +416,8 @@
|
|||
<string name="turbo_speed_limit_description">Cuando el modo turbo esté activado, la emulación se ejecutará a esta velocidad.</string>
|
||||
<string name="slow_speed_limit">Velocidad lenta</string>
|
||||
<string name="slow_speed_limit_description">Cuando el modo lento esté activado, la emulación se ejecutará a esta velocidad.</string>
|
||||
<string name="cpu_backend">Motor de la CPU</string>
|
||||
<string name="cpu_accuracy">Precisión de la CPU</string>
|
||||
<string name="cpu_backend">Motor del procesador</string>
|
||||
<string name="cpu_accuracy">Precisión del procesador</string>
|
||||
<string name="value_with_units">%1$s%2$s</string>
|
||||
|
||||
<!-- System settings strings -->
|
||||
|
|
@ -433,7 +433,7 @@
|
|||
<string name="set_custom_rtc">Configurar RTC personalizado</string>
|
||||
|
||||
<!-- CPU -->
|
||||
<string name="fast_cpu_time">Overclock de la CPU</string>
|
||||
<string name="fast_cpu_time">Overclock del procesador</string>
|
||||
<string name="fast_cpu_time_description">Fuerza a la CPU emulada a ejecutarser a una velocidad de reloj más alta, lo cual reduce ciertos limitadores de fotogramas por segundo. Usa Boost (1700 MHz) para ejecutar a la velocidad de reloj nativa más alta de la Switch, o Fast (2000 MHz) para ejecutar a una velocidad doble de reloj.</string>
|
||||
<string name="custom_cpu_ticks">Ticks de CPU personalizados</string>
|
||||
<string name="custom_cpu_ticks_description">Establezca un valor personalizado de los ciclos de la CPU. Los valores más altos pueden aumentar el rendimiento, pero también pueden hacer que el juego se congele. Se recomienda un rango de 77–21000.</string>
|
||||
|
|
@ -536,7 +536,7 @@
|
|||
<string name="warning_resolution">Escalar la resolución a 2x o más puede causar problemas y ralentizar significativamente su dispositivo.</string>
|
||||
|
||||
<!-- Debug settings strings -->
|
||||
<string name="cpu">CPU</string>
|
||||
<string name="cpu">Procesador</string>
|
||||
<string name="use_auto_stub">Usar Auto Stub</string>
|
||||
<string name="use_auto_stub_description">Rellena automáticamente servicios y funciones ausentes. Puede mejorar la compatibilidad pero puede causar cierres inesperados.</string>
|
||||
|
||||
|
|
|
|||
|
|
@ -482,6 +482,10 @@
|
|||
<string name="use_disk_shader_cache_description">Уменьшение зависаний за счет хранения и загрузки сгенерированных шейдеров.</string>
|
||||
<string name="renderer_force_max_clock">Принудительная максимальная тактовая частота (только для Adreno)</string>
|
||||
<string name="renderer_force_max_clock_description">Заставляет ГПУ работать на максимально возможных тактовых частотах (тепловые ограничения все равно будут применяться).</string>
|
||||
<string name="renderer_asynchronous_gpu_emulation">Асинхронная эмуляция ГПУ</string>
|
||||
<string name="renderer_asynchronous_gpu_emulation_description">Выполняет эмуляцию ГПУ асинхронно для снижения задержек ЦП и увеличения производительности. Отключайте только при возникновении проблем с таймингами.</string>
|
||||
<string name="renderer_async_presentation">Асинхронная презентация</string>
|
||||
<string name="renderer_async_presentation_description">Немного улучшает производительность, перемещая презентацию в отдельный поток ЦП.</string>
|
||||
<string name="renderer_reactive_flushing">Реактивная очистка</string>
|
||||
<string name="renderer_reactive_flushing_description">Повышение точности рендеринга в некоторых играх за счет снижения производительности.</string>
|
||||
<string name="enable_buffer_history">Включить историю буфера</string>
|
||||
|
|
@ -1080,6 +1084,7 @@
|
|||
<string name="app_language_system">Следовать системе</string>
|
||||
<!-- Static Themes -->
|
||||
<string name="static_theme_color">Цвет темы</string>
|
||||
<string name="eden_theme">Eden</string>
|
||||
<string name="violet">Фиолетовый </string>
|
||||
<string name="blue">Синий</string>
|
||||
<string name="cyan">Циановый</string>
|
||||
|
|
|
|||
|
|
@ -482,6 +482,10 @@
|
|||
<string name="use_disk_shader_cache_description">Зменшує затримки шляхом збереження шейдерів.</string>
|
||||
<string name="renderer_force_max_clock">Максимальна тактова частота (тільки Adreno)</string>
|
||||
<string name="renderer_force_max_clock_description">Змушує GPU працювати на максимальній тактовій частоті.</string>
|
||||
<string name="renderer_asynchronous_gpu_emulation">Асинхронна емуляція ГП</string>
|
||||
<string name="renderer_asynchronous_gpu_emulation_description">Емуляція ГП виконується асинхронно для зменшення затримок ЦП й покращення пропускної здатності. Вимкніть лише у випадку виникнення проблем із таймінгами.</string>
|
||||
<string name="renderer_async_presentation">Асинхронне подання</string>
|
||||
<string name="renderer_async_presentation_description">Трохи покращує продуктивність завдяки переміщенню подання на окремий потік ЦП.</string>
|
||||
<string name="renderer_reactive_flushing">Реактивне очищення</string>
|
||||
<string name="renderer_reactive_flushing_description">Покращує точність рендерингу в деяких іграх.</string>
|
||||
<string name="enable_buffer_history">Увімкнути історію буфера</string>
|
||||
|
|
|
|||
|
|
@ -476,21 +476,25 @@
|
|||
<string name="use_disk_shader_cache_description">将生成的着色器缓存于磁盘中并进行读取,以减少卡顿。</string>
|
||||
<string name="renderer_force_max_clock">强制最大时钟 (仅限 Adreno)</string>
|
||||
<string name="renderer_force_max_clock_description">强制 GPU 以最大时钟运行 (仍被温控限制)。</string>
|
||||
<string name="renderer_asynchronous_gpu_emulation">GPU 异步模拟</string>
|
||||
<string name="renderer_asynchronous_gpu_emulation_description">异步运行 GPU 模拟,以减少 CPU 停顿并提高吞吐量。仅当遇到与时序相关的问题时才应禁用此功能。</string>
|
||||
<string name="renderer_async_presentation">异步呈现</string>
|
||||
<string name="renderer_async_presentation_description">通过将呈现操作移至单独的 CPU 线程来略微提升性能。</string>
|
||||
<string name="renderer_reactive_flushing">启用反应性刷新</string>
|
||||
<string name="renderer_reactive_flushing_description">牺牲性能,提高某些游戏的渲染精度。</string>
|
||||
<string name="renderer_reactive_flushing_description">通过牺牲性能来提高某些游戏的渲染精度。</string>
|
||||
<string name="enable_buffer_history">启用缓冲区历史</string>
|
||||
<string name="enable_buffer_history_description">允许访问之前的缓冲状态。\n这个选项可能会提升某些游戏的渲染质量和性能一致性。</string>
|
||||
<string name="enable_buffer_history_description">启用对先前缓冲区状态的访问。此选项可在某些游戏中提升渲染质量并保持性能的一致性。</string>
|
||||
<string name="use_optimized_vertex_buffers">优化顶点缓冲区</string>
|
||||
<string name="use_optimized_vertex_buffers_description">实现优化顶点缓冲区绑定以提升性能。需要 Mesa 26.0+ Turnip 驱动。老驱动会崩溃。</string>
|
||||
<string name="use_optimized_vertex_buffers_description">启用经过优化的顶点缓冲区绑定以提升性能。需要 Mesa 26.0 及以上版本的 Turnip 驱动程序。在旧版驱动程序上会导致程序崩溃。</string>
|
||||
|
||||
<string name="hacks">Hacks</string>
|
||||
|
||||
<string name="fast_gpu_time">GPU 超频频率</string>
|
||||
<string name="fast_gpu_time_description">强制大多数游戏以其最高原生分辨率运行。使用 256 以获得最大性能,使用 512 以获得最大图形保真度。</string>
|
||||
<string name="fast_gpu_time_description">强制大多数游戏以其最高原生分辨率运行。设置为 256 可获得最佳性能,设置为 512 可获得最佳画面保真度。</string>
|
||||
<string name="skip_cpu_inner_invalidation">跳过CPU内部无效化</string>
|
||||
<string name="skip_cpu_inner_invalidation_description">在内存更新期间跳过某些CPU端缓存无效化,减少CPU使用率并提高其性能。可能会导致某些游戏出现故障或崩溃。</string>
|
||||
<string name="fix_bloom_effects">修复泛光效果</string>
|
||||
<string name="fix_bloom_effects_description">减少《塞尔达传说:智慧的再现》(LA/EOW) 在 Adreno 700 系列 GPU 上的模糊感,并移除《横冲直撞》(Burnout) 中的模糊特效。警告:可能会导致其他游戏出现画面花屏或异常。</string>
|
||||
<string name="fix_bloom_effects">修复 Bloom 效果</string>
|
||||
<string name="fix_bloom_effects_description">减少《塞尔达传说:智慧的再现》(Adreno 700)中的 bloom 模糊,并移除《Burnout》中的 bloom 效果。警告:可能会导致在其他游戏中出现画面显示问题。</string>
|
||||
<string name="renderer_asynchronous_shaders">使用异步着色器</string>
|
||||
<string name="renderer_asynchronous_shaders_description">异步编译着色器。这可能会减少卡顿,但也可能会导致图形错误。</string>
|
||||
<string name="gpu_unswizzle_settings">GPU 还原设置</string>
|
||||
|
|
|
|||
|
|
@ -511,6 +511,8 @@
|
|||
<string name="skip_cpu_inner_invalidation_description">Skips certain CPU-side cache invalidations during memory updates, reducing CPU usage and improving it\'s performance. This may cause glitches or crashes on some games.</string>
|
||||
<string name="fix_bloom_effects">Fix Bloom Effects</string>
|
||||
<string name="fix_bloom_effects_description">Reduces bloom blur in LA/EOW (Adreno 700), removes bloom in Burnout. Warning: may cause graphical artifacts in other games.</string>
|
||||
<string name="rescale_hack">Enable Legacy Rescale Pass</string>
|
||||
<string name="rescale_hack_description">Fixes Luigi Mansion 3 artifact lines.</string>
|
||||
<string name="renderer_asynchronous_shaders">Use asynchronous shaders</string>
|
||||
<string name="renderer_asynchronous_shaders_description">Compiles shaders asynchronously. This may reduce stutters but may also introduce glitches.</string>
|
||||
<string name="gpu_unswizzle_settings">GPU Unswizzle Settings</string>
|
||||
|
|
|
|||
|
|
@ -636,8 +636,8 @@ struct Values {
|
|||
Category::System};
|
||||
SwitchableSetting<Region, true> region_index{linkage, Region::Usa, "region_index", Category::System};
|
||||
SwitchableSetting<TimeZone, true> time_zone_index{linkage, TimeZone::Auto, "time_zone_index", Category::System};
|
||||
Setting<u32> serial_battery{linkage, 0, "serial_battery", Category::System};
|
||||
Setting<u32> serial_unit{linkage, 0, "serial_unit", Category::System};
|
||||
Setting<u32> serial_battery{linkage, 0, "serial_battery", Category::Debugging};
|
||||
Setting<u32> serial_unit{linkage, 0, "serial_unit", Category::Debugging};
|
||||
// Measured in seconds since epoch
|
||||
SwitchableSetting<bool> custom_rtc_enabled{linkage, false, "custom_rtc_enabled", Category::System, Specialization::Paired, true, true};
|
||||
SwitchableSetting<s64> custom_rtc{
|
||||
|
|
@ -807,7 +807,7 @@ struct Values {
|
|||
0,
|
||||
65535,
|
||||
"debug_knobs",
|
||||
Category::Core,
|
||||
Category::Debugging,
|
||||
Specialization::Countable,
|
||||
true,
|
||||
true};
|
||||
|
|
|
|||
|
|
@ -289,7 +289,6 @@ void ArmDynarmic32::MakeJit(Common::PageTable* page_table) {
|
|||
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
|
||||
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreStandardFPCRValue;
|
||||
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN;
|
||||
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor;
|
||||
break;
|
||||
// Paranoia mode for debugging optimizations
|
||||
case Settings::CpuAccuracy::Paranoid:
|
||||
|
|
|
|||
|
|
@ -340,7 +340,6 @@ void ArmDynarmic64::MakeJit(Common::PageTable* page_table, std::size_t address_s
|
|||
config.unsafe_optimizations = true;
|
||||
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
|
||||
config.fastmem_address_space_bits = 64;
|
||||
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor;
|
||||
break;
|
||||
// Paranoia mode for debugging optimizations
|
||||
case Settings::CpuAccuracy::Paranoid:
|
||||
|
|
|
|||
|
|
@ -169,6 +169,8 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QObject* parent) {
|
|||
tr("Runs an additional optimization pass over generated SPIRV shaders.\n"
|
||||
"Will increase time required for shader compilation.\nMay slightly improve "
|
||||
"performance.\nThis feature is experimental."));
|
||||
INSERT(Settings, use_asynchronous_gpu_emulation, tr("Use asynchronous GPU emulation"),
|
||||
tr("Uses an extra CPU thread for rendering.\nThis option should always remain enabled."));
|
||||
INSERT(Settings, nvdec_emulation, tr("NVDEC emulation:"),
|
||||
tr("Specifies how videos should be decoded.\nIt can either use the CPU or the GPU for "
|
||||
"decoding, or perform no decoding at all (black screen on videos).\n"
|
||||
|
|
@ -315,9 +317,6 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QObject* parent) {
|
|||
"their resolution, details and supported controllers and depending on this setting.\n"
|
||||
"Setting to Handheld can help improve performance for low end systems."));
|
||||
INSERT(Settings, current_user, QString(), QString());
|
||||
INSERT(Settings, serial_unit, tr("Unit Serial"), QString());
|
||||
INSERT(Settings, serial_battery, tr("Battery Serial"), QString());
|
||||
INSERT(Settings, debug_knobs, tr("Debug knobs"), QString());
|
||||
|
||||
// Controls
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,8 @@ void ConfigureDebug::SetConfiguration() {
|
|||
ui->enable_all_controllers->setChecked(Settings::values.enable_all_controllers.GetValue());
|
||||
ui->extended_logging->setChecked(Settings::values.extended_logging.GetValue());
|
||||
ui->perform_vulkan_check->setChecked(Settings::values.perform_vulkan_check.GetValue());
|
||||
ui->serial_battery_edit->setText(QString::fromStdString(std::to_string(Settings::values.serial_battery.GetValue())));
|
||||
ui->serial_board_edit->setText(QString::fromStdString(std::to_string(Settings::values.serial_unit.GetValue())));
|
||||
#ifdef YUZU_USE_QT_WEB_ENGINE
|
||||
ui->disable_web_applet->setChecked(Settings::values.disable_web_applet.GetValue());
|
||||
#else
|
||||
|
|
@ -126,6 +128,8 @@ void ConfigureDebug::ApplyConfiguration() {
|
|||
Settings::values.extended_logging = ui->extended_logging->isChecked();
|
||||
Settings::values.perform_vulkan_check = ui->perform_vulkan_check->isChecked();
|
||||
Settings::values.disable_web_applet = ui->disable_web_applet->isChecked();
|
||||
Settings::values.serial_battery = ui->serial_battery_edit->text().toUInt();
|
||||
Settings::values.serial_unit = ui->serial_board_edit->text().toUInt();
|
||||
Settings::values.debug_knobs = ui->debug_knobs_spinbox->value();
|
||||
Debugger::ToggleConsole();
|
||||
Common::Log::Filter filter;
|
||||
|
|
|
|||
|
|
@ -23,27 +23,18 @@ DataDialog::DataDialog(QWidget* parent) : QDialog(parent), ui(std::make_unique<U
|
|||
|
||||
// TODO: Should we make this a single widget that pulls data from a model?
|
||||
#define WIDGET(label, name) \
|
||||
ui->page->addWidget(new DataWidget(FrontendCommon::DataManager::DataDir::name, \
|
||||
QtCommon::StringLookup::DataManager##name##Tooltip, \
|
||||
QStringLiteral(#name), this)); \
|
||||
ui->labels->addItem(label);
|
||||
ui->pages->addTab(new DataWidget(FrontendCommon::DataManager::DataDir::name, \
|
||||
QtCommon::StringLookup::DataManager##name##Tooltip, \
|
||||
QStringLiteral(#name), this), \
|
||||
label);
|
||||
|
||||
WIDGET(tr("Shaders"), Shaders)
|
||||
WIDGET(tr("UserNAND"), UserNand)
|
||||
WIDGET(tr("SysNAND"), SysNand)
|
||||
WIDGET(tr("User NAND"), UserNand)
|
||||
WIDGET(tr("System NAND"), SysNand)
|
||||
WIDGET(tr("Mods"), Mods)
|
||||
WIDGET(tr("Saves"), Saves)
|
||||
|
||||
#undef WIDGET
|
||||
|
||||
connect(ui->labels, &QListWidget::itemSelectionChanged, this, [this]() {
|
||||
const auto items = ui->labels->selectedItems();
|
||||
if (items.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
ui->page->setCurrentIndex(ui->labels->row(items[0]));
|
||||
});
|
||||
}
|
||||
|
||||
DataDialog::~DataDialog() = default;
|
||||
|
|
@ -71,25 +62,29 @@ DataWidget::DataWidget(FrontendCommon::DataManager::DataDir data_dir,
|
|||
}
|
||||
|
||||
void DataWidget::clear() {
|
||||
std::string user_id = selectProfile();
|
||||
QtCommon::Content::ClearDataDir(m_dir, user_id);
|
||||
std::optional<std::string> user_id = selectProfile();
|
||||
if (!user_id) return;
|
||||
QtCommon::Content::ClearDataDir(m_dir, user_id.value());
|
||||
scan();
|
||||
}
|
||||
|
||||
void DataWidget::open() {
|
||||
std::string user_id = selectProfile();
|
||||
std::optional<std::string> user_id = selectProfile();
|
||||
if (!user_id) return;
|
||||
QDesktopServices::openUrl(QUrl::fromLocalFile(
|
||||
QString::fromStdString(FrontendCommon::DataManager::GetDataDirString(m_dir, user_id))));
|
||||
QString::fromStdString(FrontendCommon::DataManager::GetDataDirString(m_dir, user_id.value()))));
|
||||
}
|
||||
|
||||
void DataWidget::upload() {
|
||||
std::string user_id = selectProfile();
|
||||
QtCommon::Content::ExportDataDir(m_dir, user_id, m_exportName);
|
||||
std::optional<std::string> user_id = selectProfile();
|
||||
if (!user_id) return;
|
||||
QtCommon::Content::ExportDataDir(m_dir, user_id.value(), m_exportName);
|
||||
}
|
||||
|
||||
void DataWidget::download() {
|
||||
std::string user_id = selectProfile();
|
||||
QtCommon::Content::ImportDataDir(m_dir, user_id, std::bind(&DataWidget::scan, this));
|
||||
std::optional<std::string> user_id = selectProfile();
|
||||
if (!user_id) return;
|
||||
QtCommon::Content::ImportDataDir(m_dir, user_id.value(), std::bind(&DataWidget::scan, this));
|
||||
}
|
||||
|
||||
void DataWidget::scan() {
|
||||
|
|
@ -108,10 +103,11 @@ void DataWidget::scan() {
|
|||
QtConcurrent::run([this]() { return FrontendCommon::DataManager::DataDirSize(m_dir); }));
|
||||
}
|
||||
|
||||
std::string DataWidget::selectProfile() {
|
||||
std::optional<std::string> DataWidget::selectProfile() {
|
||||
std::string user_id{};
|
||||
if (m_dir == FrontendCommon::DataManager::DataDir::Saves) {
|
||||
user_id = GetProfileIDString();
|
||||
if (user_id.empty()) return std::nullopt;
|
||||
}
|
||||
|
||||
return user_id;
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ private:
|
|||
FrontendCommon::DataManager::DataDir m_dir;
|
||||
const QString m_exportName;
|
||||
|
||||
std::string selectProfile();
|
||||
std::optional<std::string> selectProfile();
|
||||
};
|
||||
|
||||
#endif // DATA_DIALOG_H
|
||||
|
|
|
|||
|
|
@ -27,31 +27,9 @@
|
|||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0">
|
||||
<item>
|
||||
<widget class="QListWidget" name="labels">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QStackedWidget" name="page">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>275</width>
|
||||
<height>200</height>
|
||||
</size>
|
||||
</property>
|
||||
<widget class="QTabWidget" name="pages">
|
||||
<property name="currentIndex">
|
||||
<number>-1</number>
|
||||
</property>
|
||||
|
|
|
|||
Loading…
Reference in a new issue