added settings to android (#118)

Signed-off-by: Aleksandr Popovich <alekpopo@pm.me>
Signed-off-by: swurl <swurl@swurl.xyz>
Reviewed-on: #118
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Co-authored-by: swurl <swurl@swurl.xyz>
Co-committed-by: Aleksandr Popovich <alekpopo@pm.me>
This commit is contained in:
swurl 2025-05-21 18:02:34 -04:00
parent b1b6e0064f
commit c79b7f82c8
No known key found for this signature in database
GPG key ID: A5A7629F109C8FD1
38 changed files with 243 additions and 104 deletions

View file

@ -166,6 +166,11 @@ object NativeLibrary {
*/ */
external fun getPerfStats(): DoubleArray external fun getPerfStats(): DoubleArray
/**
* Returns the number of shaders being built
*/
external fun getShadersBuilding(): Int
/** /**
* Returns the current CPU backend. * Returns the current CPU backend.
*/ */

View file

@ -33,16 +33,18 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting {
TOUCHSCREEN("touchscreen"), TOUCHSCREEN("touchscreen"),
SHOW_THERMAL_OVERLAY("show_thermal_overlay"), SHOW_THERMAL_OVERLAY("show_thermal_overlay"),
FRAME_INTERPOLATION("frame_interpolation"), FRAME_INTERPOLATION("frame_interpolation"),
FRAME_SKIPPING("frame_skipping"), // FRAME_SKIPPING("frame_skipping"),
SHOW_FPS("show_fps"), SHOW_FPS("show_fps"),
SHOW_FRAMETIME("show_frame_time"), SHOW_FRAMETIME("show_frame_time"),
SHOW_SPEED("show_speed"),
SHOW_APP_RAM_USAGE("show_app_ram_usage"), SHOW_APP_RAM_USAGE("show_app_ram_usage"),
SHOW_SYSTEM_RAM_USAGE("show_system_ram_usage"), SHOW_SYSTEM_RAM_USAGE("show_system_ram_usage"),
SHOW_BAT_TEMPERATURE("show_bat_temperature"), SHOW_BAT_TEMPERATURE("show_bat_temperature"),
SHOW_SHADERS_BUILDING("show_shaders_building"),
OVERLAY_BACKGROUND("overlay_background"), OVERLAY_BACKGROUND("overlay_background"),
DONT_SHOW_EDEN_VEIL_WARNING("dont_show_eden_veil_warning"),
DEBUG_FLUSH_BY_LINE("flush_lines"),
USE_LRU_CACHE("use_lru_cache"),; USE_LRU_CACHE("use_lru_cache"),;
external fun isFrameSkippingEnabled(): Boolean // external fun isFrameSkippingEnabled(): Boolean
external fun isFrameInterpolationEnabled(): Boolean external fun isFrameInterpolationEnabled(): Boolean

View file

@ -33,6 +33,7 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
LOCK_DRAWER("lock_drawer"), LOCK_DRAWER("lock_drawer"),
VERTICAL_ALIGNMENT("vertical_alignment"), VERTICAL_ALIGNMENT("vertical_alignment"),
PERF_OVERLAY_POSITION("perf_overlay_position"), PERF_OVERLAY_POSITION("perf_overlay_position"),
MEMORY_LAYOUT("memory_layout_mode"),
FSR_SHARPENING_SLIDER("fsr_sharpening_slider"), FSR_SHARPENING_SLIDER("fsr_sharpening_slider"),
CABINET_APPLET("cabinet_applet_mode"), CABINET_APPLET("cabinet_applet_mode"),
CONTROLLER_APPLET("controller_applet_mode"), CONTROLLER_APPLET("controller_applet_mode"),

View file

@ -34,6 +34,7 @@ object Settings {
const val PREF_FIRST_APP_LAUNCH = "FirstApplicationLaunch" const val PREF_FIRST_APP_LAUNCH = "FirstApplicationLaunch"
const val PREF_SHOULD_SHOW_PRE_ALPHA_WARNING = "ShouldShowPreAlphaWarning" const val PREF_SHOULD_SHOW_PRE_ALPHA_WARNING = "ShouldShowPreAlphaWarning"
const val PREF_SHOULD_SHOW_PRE_ALPHA_BANNER = "ShouldShowPreAlphaBanner"
const val PREF_MEMORY_WARNING_SHOWN = "MemoryWarningShown" const val PREF_MEMORY_WARNING_SHOWN = "MemoryWarningShown"
const val SECTION_STATS_OVERLAY = "Stats Overlay" const val SECTION_STATS_OVERLAY = "Stats Overlay"

View file

@ -52,10 +52,6 @@ abstract class SettingsItem(
val isEditable: Boolean val isEditable: Boolean
get() { get() {
if (setting.key == BooleanSetting.FRAME_SKIPPING.key) {
// disabled for now
return false
}
// Can't change docked mode toggle when using handheld mode // Can't change docked mode toggle when using handheld mode
if (setting.key == BooleanSetting.USE_DOCKED_MODE.key) { if (setting.key == BooleanSetting.USE_DOCKED_MODE.key) {
return NativeInput.getStyleIndex(0) != NpadStyleIndex.Handheld return NativeInput.getStyleIndex(0) != NpadStyleIndex.Handheld
@ -136,7 +132,7 @@ abstract class SettingsItem(
titleId = R.string.dyna_state, titleId = R.string.dyna_state,
descriptionId = R.string.dyna_state_description, descriptionId = R.string.dyna_state_description,
min = 0, min = 0,
max = 2, max = 3,
) )
) )
put( put(
@ -186,6 +182,13 @@ abstract class SettingsItem(
descriptionId = R.string.picture_in_picture_description descriptionId = R.string.picture_in_picture_description
) )
) )
put(
SwitchSetting(
BooleanSetting.DEBUG_FLUSH_BY_LINE,
titleId = R.string.flush_by_line,
descriptionId = R.string.flush_by_line_description
)
)
val dockedModeSetting = object : AbstractBooleanSetting { val dockedModeSetting = object : AbstractBooleanSetting {
override val key = BooleanSetting.USE_DOCKED_MODE.key override val key = BooleanSetting.USE_DOCKED_MODE.key
@ -216,13 +219,13 @@ abstract class SettingsItem(
) )
) )
put( // put(
SwitchSetting( // SwitchSetting(
BooleanSetting.FRAME_SKIPPING, // BooleanSetting.FRAME_SKIPPING,
titleId = R.string.frame_skipping, // titleId = R.string.frame_skipping,
descriptionId = R.string.frame_skipping_description // descriptionId = R.string.frame_skipping_description
) // )
) // )
put( put(
SwitchSetting( SwitchSetting(
@ -231,6 +234,15 @@ abstract class SettingsItem(
descriptionId = R.string.use_docked_mode_description descriptionId = R.string.use_docked_mode_description
) )
) )
put(
SingleChoiceSetting(
IntSetting.MEMORY_LAYOUT,
titleId = R.string.memory_layout,
descriptionId = R.string.memory_layout_description,
choicesId = R.array.memoryNames,
valuesId = R.array.memoryValues
)
)
put( put(
SwitchSetting( SwitchSetting(
BooleanSetting.CORE_SYNC_CORE_SPEED, BooleanSetting.CORE_SYNC_CORE_SPEED,
@ -362,13 +374,6 @@ abstract class SettingsItem(
descriptionId = R.string.show_frametime_description descriptionId = R.string.show_frametime_description
) )
) )
put(
SwitchSetting(
BooleanSetting.SHOW_SPEED,
R.string.show_speed,
descriptionId = R.string.show_speed_description
)
)
put( put(
SwitchSetting( SwitchSetting(
BooleanSetting.SHOW_APP_RAM_USAGE, BooleanSetting.SHOW_APP_RAM_USAGE,
@ -390,6 +395,13 @@ abstract class SettingsItem(
descriptionId = R.string.show_bat_temperature_description descriptionId = R.string.show_bat_temperature_description
) )
) )
put(
SwitchSetting(
BooleanSetting.SHOW_SHADERS_BUILDING,
R.string.show_shaders_building,
descriptionId = R.string.show_shaders_building_description
)
)
put( put(
SingleChoiceSetting( SingleChoiceSetting(
IntSetting.RENDERER_VSYNC, IntSetting.RENDERER_VSYNC,

View file

@ -8,6 +8,7 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.content.edit
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
@ -15,15 +16,17 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.navigation.findNavController import androidx.navigation.findNavController
import androidx.navigation.fragment.navArgs import androidx.navigation.fragment.navArgs
import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.transition.MaterialSharedAxis import com.google.android.material.transition.MaterialSharedAxis
import org.yuzu.yuzu_emu.R import org.yuzu.yuzu_emu.R
import org.yuzu.yuzu_emu.databinding.FragmentSettingsBinding import org.yuzu.yuzu_emu.databinding.FragmentSettingsBinding
import org.yuzu.yuzu_emu.features.input.NativeInput import org.yuzu.yuzu_emu.features.input.NativeInput
import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting
import org.yuzu.yuzu_emu.features.settings.model.Settings import org.yuzu.yuzu_emu.features.settings.model.Settings
import org.yuzu.yuzu_emu.fragments.MessageDialogFragment import org.yuzu.yuzu_emu.fragments.MessageDialogFragment
import org.yuzu.yuzu_emu.utils.ViewUtils.updateMargins import org.yuzu.yuzu_emu.utils.ViewUtils.updateMargins
import org.yuzu.yuzu_emu.utils.collect import org.yuzu.yuzu_emu.utils.*
class SettingsFragment : Fragment() { class SettingsFragment : Fragment() {
private lateinit var presenter: SettingsFragmentPresenter private lateinit var presenter: SettingsFragmentPresenter
@ -66,7 +69,8 @@ class SettingsFragment : Fragment() {
presenter = SettingsFragmentPresenter( presenter = SettingsFragmentPresenter(
settingsViewModel, settingsViewModel,
settingsAdapter!!, settingsAdapter!!,
args.menuTag args.menuTag,
activity
) )
binding.toolbarSettingsLayout.title = if (args.menuTag == Settings.MenuTag.SECTION_ROOT && binding.toolbarSettingsLayout.title = if (args.menuTag == Settings.MenuTag.SECTION_ROOT &&
@ -86,6 +90,7 @@ class SettingsFragment : Fragment() {
else -> getString(args.menuTag.titleId) else -> getString(args.menuTag.titleId)
} }
} }
binding.listSettings.apply { binding.listSettings.apply {
adapter = settingsAdapter adapter = settingsAdapter
layoutManager = LinearLayoutManager(requireContext()) layoutManager = LinearLayoutManager(requireContext())

View file

@ -4,6 +4,8 @@
package org.yuzu.yuzu_emu.features.settings.ui package org.yuzu.yuzu_emu.features.settings.ui
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity
import android.app.AlertDialog
import android.os.Build import android.os.Build
import android.widget.Toast import android.widget.Toast
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
@ -29,11 +31,14 @@ import org.yuzu.yuzu_emu.features.settings.model.view.*
import org.yuzu.yuzu_emu.utils.InputHandler import org.yuzu.yuzu_emu.utils.InputHandler
import org.yuzu.yuzu_emu.utils.NativeConfig import org.yuzu.yuzu_emu.utils.NativeConfig
import androidx.core.content.edit import androidx.core.content.edit
import androidx.fragment.app.FragmentActivity
import org.yuzu.yuzu_emu.fragments.MessageDialogFragment
class SettingsFragmentPresenter( class SettingsFragmentPresenter(
private val settingsViewModel: SettingsViewModel, private val settingsViewModel: SettingsViewModel,
private val adapter: SettingsAdapter, private val adapter: SettingsAdapter,
private var menuTag: MenuTag private var menuTag: MenuTag,
private var activity: FragmentActivity?
) { ) {
private var settingsList = ArrayList<SettingsItem>() private var settingsList = ArrayList<SettingsItem>()
@ -66,7 +71,7 @@ class SettingsFragmentPresenter(
} }
// Allows you to show/hide abstract settings based on the paired setting key // Allows you to show/hide abstract settings based on the paired setting key
fun ArrayList<SettingsItem>.addAbstract(item: SettingsItem) { private fun ArrayList<SettingsItem>.addAbstract(item: SettingsItem) {
val pairedSettingKey = item.setting.pairedSettingKey val pairedSettingKey = item.setting.pairedSettingKey
if (pairedSettingKey.isNotEmpty()) { if (pairedSettingKey.isNotEmpty()) {
val pairedSettingsItem = val pairedSettingsItem =
@ -78,6 +83,9 @@ class SettingsFragmentPresenter(
} }
fun onViewCreated() { fun onViewCreated() {
if (menuTag == MenuTag.SECTION_EDEN_VEIL) {
showEdenVeilWarningDialog()
}
loadSettingsList() loadSettingsList()
} }
@ -224,10 +232,10 @@ class SettingsFragmentPresenter(
add(HeaderSetting(R.string.stats_overlay_items)) add(HeaderSetting(R.string.stats_overlay_items))
add(BooleanSetting.SHOW_FPS.key) add(BooleanSetting.SHOW_FPS.key)
add(BooleanSetting.SHOW_FRAMETIME.key) add(BooleanSetting.SHOW_FRAMETIME.key)
add(BooleanSetting.SHOW_SPEED.key)
add(BooleanSetting.SHOW_APP_RAM_USAGE.key) add(BooleanSetting.SHOW_APP_RAM_USAGE.key)
add(BooleanSetting.SHOW_SYSTEM_RAM_USAGE.key) add(BooleanSetting.SHOW_SYSTEM_RAM_USAGE.key)
add(BooleanSetting.SHOW_BAT_TEMPERATURE.key) add(BooleanSetting.SHOW_BAT_TEMPERATURE.key)
add(BooleanSetting.SHOW_SHADERS_BUILDING.key)
} }
} }
@ -387,24 +395,25 @@ class SettingsFragmentPresenter(
// TODO(alekpop): sort these into headers. // TODO(alekpop): sort these into headers.
private fun addEdenVeilSettings(sl: ArrayList<SettingsItem>) { private fun addEdenVeilSettings(sl: ArrayList<SettingsItem>) {
sl.apply { sl.apply {
add(BooleanSetting.FRAME_INTERPOLATION.key) add(HeaderSetting(R.string.veil_extensions))
add(BooleanSetting.FRAME_SKIPPING.key)
add(BooleanSetting.USE_LRU_CACHE.key)
add(BooleanSetting.RENDERER_FAST_GPU.key)
add(ByteSetting.RENDERER_DYNA_STATE.key) add(ByteSetting.RENDERER_DYNA_STATE.key)
add(BooleanSetting.RENDERER_PROVOKING_VERTEX.key) add(BooleanSetting.RENDERER_PROVOKING_VERTEX.key)
add(BooleanSetting.RENDERER_DESCRIPTOR_INDEXING.key) add(BooleanSetting.RENDERER_DESCRIPTOR_INDEXING.key)
add(BooleanSetting.CORE_SYNC_CORE_SPEED.key) add(HeaderSetting(R.string.veil_renderer))
add(BooleanSetting.FRAME_INTERPOLATION.key)
add(BooleanSetting.RENDERER_FAST_GPU.key)
add(IntSetting.RENDERER_SHADER_BACKEND.key) add(IntSetting.RENDERER_SHADER_BACKEND.key)
add(IntSetting.RENDERER_NVDEC_EMULATION.key) add(IntSetting.RENDERER_NVDEC_EMULATION.key)
add(IntSetting.RENDERER_ASTC_DECODE_METHOD.key) add(IntSetting.RENDERER_ASTC_DECODE_METHOD.key)
add(IntSetting.RENDERER_ASTC_RECOMPRESSION.key) add(IntSetting.RENDERER_ASTC_RECOMPRESSION.key)
add(IntSetting.RENDERER_VRAM_USAGE_MODE.key) add(IntSetting.RENDERER_VRAM_USAGE_MODE.key)
add(IntSetting.RENDERER_OPTIMIZE_SPIRV_OUTPUT.key) add(IntSetting.RENDERER_OPTIMIZE_SPIRV_OUTPUT.key)
add(HeaderSetting(R.string.veil_misc))
add(BooleanSetting.USE_LRU_CACHE.key)
add(BooleanSetting.CORE_SYNC_CORE_SPEED.key)
add(IntSetting.MEMORY_LAYOUT.key)
} }
} }
@ -1076,6 +1085,28 @@ class SettingsFragmentPresenter(
add(BooleanSetting.USE_AUTO_STUB.key) add(BooleanSetting.USE_AUTO_STUB.key)
add(BooleanSetting.CPU_DEBUG_MODE.key) add(BooleanSetting.CPU_DEBUG_MODE.key)
add(SettingsItem.FASTMEM_COMBINED) add(SettingsItem.FASTMEM_COMBINED)
add(HeaderSetting(R.string.log))
add(BooleanSetting.DEBUG_FLUSH_BY_LINE.key)
}
}
fun showEdenVeilWarningDialog() {
val shouldDisplayVeilWarning = !BooleanSetting.DONT_SHOW_EDEN_VEIL_WARNING.getBoolean()
if (shouldDisplayVeilWarning) {
activity?.let {
MessageDialogFragment.newInstance(
it,
titleId = R.string.eden_veil_warning_title,
descriptionId = R.string.eden_veil_warning_description,
positiveButtonTitleId = R.string.dont_show_again,
negativeButtonTitleId = R.string.close,
showNegativeButton = true,
positiveAction = {
BooleanSetting.DONT_SHOW_EDEN_VEIL_WARNING.setBoolean(true)
}
).show(it.supportFragmentManager, MessageDialogFragment.TAG)
}
} }
} }
} }

View file

@ -399,7 +399,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
emulationState.updateSurface() emulationState.updateSurface()
// Setup overlays // Setup overlays
updateshowStatsOvelray() updateShowStatsOverlay()
// Re update binding when the specs values get initialized properly // Re update binding when the specs values get initialized properly
binding.inGameMenu.getHeaderView(0).apply { binding.inGameMenu.getHeaderView(0).apply {
@ -532,7 +532,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
} }
} }
@SuppressLint("DefaultLocale") @SuppressLint("DefaultLocale")
private fun updateshowStatsOvelray() { private fun updateShowStatsOverlay() {
val showOverlay = BooleanSetting.SHOW_PERFORMANCE_OVERLAY.getBoolean() val showOverlay = BooleanSetting.SHOW_PERFORMANCE_OVERLAY.getBoolean()
binding.showStatsOverlayText.apply { binding.showStatsOverlayText.apply {
setTextColor( setTextColor(
@ -560,7 +560,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
if (BooleanSetting.SHOW_FPS.getBoolean(NativeConfig.isPerGameConfigLoaded())) { if (BooleanSetting.SHOW_FPS.getBoolean(NativeConfig.isPerGameConfigLoaded())) {
val enableFrameInterpolation = BooleanSetting.FRAME_INTERPOLATION.getBoolean() val enableFrameInterpolation = BooleanSetting.FRAME_INTERPOLATION.getBoolean()
val enableFrameSkipping = BooleanSetting.FRAME_SKIPPING.getBoolean() // val enableFrameSkipping = BooleanSetting.FRAME_SKIPPING.getBoolean()
var fpsText = String.format("FPS: %.1f", actualFps) var fpsText = String.format("FPS: %.1f", actualFps)
@ -568,9 +568,9 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
fpsText += " " + getString(R.string.enhanced_fps_suffix) fpsText += " " + getString(R.string.enhanced_fps_suffix)
} }
if (enableFrameSkipping) { // if (enableFrameSkipping) {
fpsText += " " + getString(R.string.skipping_fps_suffix) // fpsText += " " + getString(R.string.skipping_fps_suffix)
} // }
sb.append(fpsText) sb.append(fpsText)
} }
@ -585,16 +585,6 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
) )
} }
if (BooleanSetting.SHOW_SPEED.getBoolean(NativeConfig.isPerGameConfigLoaded())) {
if (sb.isNotEmpty()) sb.append(" | ")
sb.append(
String.format(
"Speed: %d%%",
(perfStats[SPEED] * 100.0 + 0.5).toInt()
)
)
}
if (BooleanSetting.SHOW_APP_RAM_USAGE.getBoolean(NativeConfig.isPerGameConfigLoaded())) { if (BooleanSetting.SHOW_APP_RAM_USAGE.getBoolean(NativeConfig.isPerGameConfigLoaded())) {
if (sb.isNotEmpty()) sb.append(" | ") if (sb.isNotEmpty()) sb.append(" | ")
val appRamUsage = File("/proc/self/statm").readLines()[0].split(' ')[1].toLong() * 4096 / 1000000 val appRamUsage = File("/proc/self/statm").readLines()[0].split(' ')[1].toLong() * 4096 / 1000000
@ -619,6 +609,16 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
sb.append(String.format("%.1f°C/%.1f°F", batteryTemp, tempF)) sb.append(String.format("%.1f°C/%.1f°F", batteryTemp, tempF))
} }
val shadersBuilding = NativeLibrary.getShadersBuilding()
if (BooleanSetting.SHOW_SHADERS_BUILDING.getBoolean(NativeConfig.isPerGameConfigLoaded()) && shadersBuilding != 0) {
if (sb.isNotEmpty()) sb.append(" | ")
val prefix = getString(R.string.shaders_prefix)
val suffix = getString(R.string.shaders_suffix)
sb.append(String.format("$prefix %d $suffix", shadersBuilding))
}
if (BooleanSetting.OVERLAY_BACKGROUND.getBoolean(NativeConfig.isPerGameConfigLoaded())) { if (BooleanSetting.OVERLAY_BACKGROUND.getBoolean(NativeConfig.isPerGameConfigLoaded())) {
binding.showStatsOverlayText.setBackgroundResource(R.color.yuzu_transparent_black) binding.showStatsOverlayText.setBackgroundResource(R.color.yuzu_transparent_black)
} else { } else {
@ -849,7 +849,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
R.id.menu_show_stats_overlay -> { R.id.menu_show_stats_overlay -> {
it.isChecked = !it.isChecked it.isChecked = !it.isChecked
BooleanSetting.SHOW_PERFORMANCE_OVERLAY.setBoolean(it.isChecked) BooleanSetting.SHOW_PERFORMANCE_OVERLAY.setBoolean(it.isChecked)
updateshowStatsOvelray() updateShowStatsOverlay()
true true
} }
R.id.menu_edit_overlay -> { R.id.menu_edit_overlay -> {

View file

@ -12,10 +12,13 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
import android.widget.ImageButton
import android.widget.PopupMenu import android.widget.PopupMenu
import android.widget.TextView import android.widget.TextView
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
@ -43,6 +46,7 @@ import org.yuzu.yuzu_emu.utils.collect
import java.util.Locale import java.util.Locale
import androidx.core.content.edit import androidx.core.content.edit
import androidx.core.view.updateLayoutParams import androidx.core.view.updateLayoutParams
import org.yuzu.yuzu_emu.features.settings.model.Settings
class GamesFragment : Fragment() { class GamesFragment : Fragment() {
private var _binding: FragmentGamesBinding? = null private var _binding: FragmentGamesBinding? = null
@ -58,7 +62,8 @@ class GamesFragment : Fragment() {
private val homeViewModel: HomeViewModel by activityViewModels() private val homeViewModel: HomeViewModel by activityViewModels()
private lateinit var gameAdapter: GameAdapter private lateinit var gameAdapter: GameAdapter
private val preferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext) private val preferences =
PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext)
private lateinit var mainActivity: MainActivity private lateinit var mainActivity: MainActivity
private val getGamesDirectory = private val getGamesDirectory =
@ -151,8 +156,13 @@ class GamesFragment : Fragment() {
getGamesDirectory.launch(Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).data) getGamesDirectory.launch(Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).data)
} }
setInsets() setInsets()
addPreAlphaBanner() val shouldDisplayPreAlphaBanner =
PreferenceManager.getDefaultSharedPreferences(requireContext())
.getBoolean(Settings.PREF_SHOULD_SHOW_PRE_ALPHA_BANNER, true)
if (shouldDisplayPreAlphaBanner) {
addPreAlphaBanner()
}
} }
val applyGridGamesBinding = { val applyGridGamesBinding = {
@ -260,7 +270,44 @@ class GamesFragment : Fragment() {
) )
gravity = Gravity.CENTER gravity = Gravity.CENTER
} }
val closeButton = ImageButton(requireContext()).apply {
id = "pre_alpha_close_button".hashCode()
layoutParams = ConstraintLayout.LayoutParams(
resources.getDimensionPixelSize(R.dimen.spacing_large),
resources.getDimensionPixelSize(R.dimen.spacing_large)
).apply {
startToStart = "pre_alpha_banner".hashCode()
topToTop = "pre_alpha_banner".hashCode()
bottomToBottom = "pre_alpha_banner".hashCode()
marginStart = resources.getDimensionPixelSize(R.dimen.spacing_large) * 2
topMargin = resources.getDimensionPixelSize(R.dimen.spacing_small)
}
setImageResource(android.R.drawable.ic_menu_close_clear_cancel)
setColorFilter(
MaterialColors.getColor(
this,
com.google.android.material.R.attr.colorOnError
)
)
setBackgroundColor(Color.Transparent.toArgb())
setOnClickListener {
PreferenceManager.getDefaultSharedPreferences(requireContext())
.edit() {
putBoolean(Settings.PREF_SHOULD_SHOW_PRE_ALPHA_BANNER, false)
}
binding.root.removeView(preAlphaBanner)
binding.root.removeView(this)
binding.swipeRefresh.updateLayoutParams<ConstraintLayout.LayoutParams> {
topToBottom = R.id.frame_search
}
}
}
binding.root.addView(preAlphaBanner) binding.root.addView(preAlphaBanner)
binding.root.addView(closeButton)
binding.swipeRefresh.updateLayoutParams<ConstraintLayout.LayoutParams> { binding.swipeRefresh.updateLayoutParams<ConstraintLayout.LayoutParams> {
topToBottom = preAlphaBanner.id topToBottom = preAlphaBanner.id
} }
@ -284,12 +331,14 @@ class GamesFragment : Fragment() {
item.isChecked = true item.isChecked = true
true true
} }
R.id.view_list -> { R.id.view_list -> {
preferences.edit() { putInt(PREF_VIEW_TYPE, GameAdapter.VIEW_TYPE_LIST) } preferences.edit() { putInt(PREF_VIEW_TYPE, GameAdapter.VIEW_TYPE_LIST) }
applyGridGamesBinding() applyGridGamesBinding()
item.isChecked = true item.isChecked = true
true true
} }
else -> false else -> false
} }
} }
@ -394,7 +443,7 @@ class GamesFragment : Fragment() {
val barInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) val barInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
val cutoutInsets = windowInsets.getInsets(WindowInsetsCompat.Type.displayCutout()) val cutoutInsets = windowInsets.getInsets(WindowInsetsCompat.Type.displayCutout())
val spacingNavigation = resources.getDimensionPixelSize(R.dimen.spacing_navigation) val spacingNavigation = resources.getDimensionPixelSize(R.dimen.spacing_navigation)
resources.getDimensionPixelSize(R.dimen.spacing_navigation_rail) resources.getDimensionPixelSize(R.dimen.spacing_navigation_rail)
val isLandscape = val isLandscape =
resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
@ -418,7 +467,7 @@ class GamesFragment : Fragment() {
binding.noticeText.updatePadding(bottom = spacingNavigation) binding.noticeText.updatePadding(bottom = spacingNavigation)
binding.header.updatePadding(top = cutoutInsets.top + resources.getDimensionPixelSize(R.dimen.spacing_large) + if (isLandscape) barInsets.top else 0) binding.header.updatePadding(top = cutoutInsets.top + resources.getDimensionPixelSize(R.dimen.spacing_large) + if (isLandscape) barInsets.top else 0)
binding.gridGames.updatePadding( binding.gridGames.updatePadding(
top = resources.getDimensionPixelSize(R.dimen.spacing_med) top = resources.getDimensionPixelSize(R.dimen.spacing_med)
) )
val mlpFab = binding.addDirectory.layoutParams as ViewGroup.MarginLayoutParams val mlpFab = binding.addDirectory.layoutParams as ViewGroup.MarginLayoutParams

View file

@ -79,18 +79,20 @@ struct Values {
Settings::Category::Overlay, Settings::Specialization::Default, true , true, &show_performance_overlay}; Settings::Category::Overlay, Settings::Specialization::Default, true , true, &show_performance_overlay};
Settings::Setting<bool> show_frame_time{linkage, false, "show_frame_time", Settings::Setting<bool> show_frame_time{linkage, false, "show_frame_time",
Settings::Category::Overlay, Settings::Specialization::Default, true , true, &show_performance_overlay}; Settings::Category::Overlay, Settings::Specialization::Default, true , true, &show_performance_overlay};
Settings::Setting<bool> show_speed{linkage, true, "show_speed",
Settings::Category::Overlay, Settings::Specialization::Default, true , true, &show_performance_overlay};
Settings::Setting<bool> show_app_ram_usage{linkage, false, "show_app_ram_usage", Settings::Setting<bool> show_app_ram_usage{linkage, false, "show_app_ram_usage",
Settings::Category::Overlay, Settings::Specialization::Default, true , true, &show_performance_overlay}; Settings::Category::Overlay, Settings::Specialization::Default, true , true, &show_performance_overlay};
Settings::Setting<bool> show_system_ram_usage{linkage, false, "show_system_ram_usage", Settings::Setting<bool> show_system_ram_usage{linkage, false, "show_system_ram_usage",
Settings::Category::Overlay, Settings::Specialization::Default, true , true, &show_performance_overlay}; Settings::Category::Overlay, Settings::Specialization::Default, true , true, &show_performance_overlay};
Settings::Setting<bool> show_bat_temperature{linkage, false, "show_bat_temperature", Settings::Setting<bool> show_bat_temperature{linkage, false, "show_bat_temperature",
Settings::Category::Overlay, Settings::Specialization::Default, true , true, &show_performance_overlay}; Settings::Category::Overlay, Settings::Specialization::Default, true , true, &show_performance_overlay};
Settings::Setting<bool> show_shaders_building{linkage, true, "show_shaders_building",
Settings::Category::Overlay, Settings::Specialization::Default, true , true, &show_performance_overlay};
Settings::Setting<bool> show_input_overlay{linkage, true, "show_input_overlay", Settings::Setting<bool> show_input_overlay{linkage, true, "show_input_overlay",
Settings::Category::Overlay}; Settings::Category::Overlay};
Settings::Setting<bool> touchscreen{linkage, true, "touchscreen", Settings::Category::Overlay}; Settings::Setting<bool> touchscreen{linkage, true, "touchscreen", Settings::Category::Overlay};
Settings::Setting<s32> lock_drawer{linkage, false, "lock_drawer", Settings::Category::Overlay}; Settings::Setting<s32> lock_drawer{linkage, false, "lock_drawer", Settings::Category::Overlay};
Settings::Setting<bool> dont_show_eden_veil_warning{linkage, false, "dont_show_eden_veil_warning", Settings::Category::Miscellaneous};
}; };
extern Values values; extern Values values;

View file

@ -67,6 +67,7 @@
#include "video_core/renderer_vulkan/renderer_vulkan.h" #include "video_core/renderer_vulkan/renderer_vulkan.h"
#include "video_core/vulkan_common/vulkan_instance.h" #include "video_core/vulkan_common/vulkan_instance.h"
#include "video_core/vulkan_common/vulkan_surface.h" #include "video_core/vulkan_common/vulkan_surface.h"
#include "video_core/shader_notify.h"
#define jconst [[maybe_unused]] const auto #define jconst [[maybe_unused]] const auto
#define jauto [[maybe_unused]] auto #define jauto [[maybe_unused]] auto
@ -158,6 +159,12 @@ const Core::PerfStatsResults& EmulationSession::PerfStats() {
return m_perf_stats; return m_perf_stats;
} }
int EmulationSession::ShadersBuilding() {
auto& shader_notify = m_system.GPU().ShaderNotify();
m_shaders_building = shader_notify.ShadersBuilding();
return m_shaders_building;
}
void EmulationSession::SurfaceChanged() { void EmulationSession::SurfaceChanged() {
if (!IsRunning()) { if (!IsRunning()) {
return; return;
@ -610,6 +617,16 @@ jdoubleArray Java_org_yuzu_yuzu_1emu_NativeLibrary_getPerfStats(JNIEnv* env, jcl
return j_stats; return j_stats;
} }
jint Java_org_yuzu_yuzu_1emu_NativeLibrary_getShadersBuilding(JNIEnv* env, jclass clazz) {
jint j_shaders = 0;
if (EmulationSession::GetInstance().IsRunning()) {
j_shaders = EmulationSession::GetInstance().ShadersBuilding();
}
return j_shaders;
}
jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_getCpuBackend(JNIEnv* env, jclass clazz) { jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_getCpuBackend(JNIEnv* env, jclass clazz) {
if (Settings::IsNceEnabled()) { if (Settings::IsNceEnabled()) {
return Common::Android::ToJString(env, "NCE"); return Common::Android::ToJString(env, "NCE");

View file

@ -44,6 +44,7 @@ public:
void ShutdownEmulation(); void ShutdownEmulation();
const Core::PerfStatsResults& PerfStats(); const Core::PerfStatsResults& PerfStats();
int ShadersBuilding();
void ConfigureFilesystemProvider(const std::string& filepath); void ConfigureFilesystemProvider(const std::string& filepath);
void InitializeSystem(bool reload); void InitializeSystem(bool reload);
void SetAppletId(int applet_id); void SetAppletId(int applet_id);
@ -72,6 +73,7 @@ private:
InputCommon::InputSubsystem m_input_subsystem; InputCommon::InputSubsystem m_input_subsystem;
Common::DetachedTasks m_detached_tasks; Common::DetachedTasks m_detached_tasks;
Core::PerfStatsResults m_perf_stats{}; Core::PerfStatsResults m_perf_stats{};
int m_shaders_building{0};
std::shared_ptr<FileSys::VfsFilesystem> m_vfs; std::shared_ptr<FileSys::VfsFilesystem> m_vfs;
Core::SystemResultStatus m_load_result{Core::SystemResultStatus::ErrorNotInitialized}; Core::SystemResultStatus m_load_result{Core::SystemResultStatus::ErrorNotInitialized};
std::atomic<bool> m_is_running = false; std::atomic<bool> m_is_running = false;

View file

@ -7,7 +7,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(مُحسَّن)</string> <string name="enhanced_fps_suffix">(مُحسَّن)</string>
<string name="skipping_fps_suffix">(تخطي)</string>
<string name="system_info_label">النظام:</string> <string name="system_info_label">النظام:</string>
<string name="show_stats_overlay">عرض إحصائيات الأداء</string> <string name="show_stats_overlay">عرض إحصائيات الأداء</string>
<string name="stats_overlay_customization">تخصيص</string> <string name="stats_overlay_customization">تخصيص</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(پێشکەوتوو)</string> <string name="enhanced_fps_suffix">(پێشکەوتوو)</string>
<string name="skipping_fps_suffix">(بازدان)</string>
<string name="system_info_label">سیستەم:</string> <string name="system_info_label">سیستەم:</string>
<string name="show_stats_overlay">پیشاندانی ستاتیستی کارایی</string> <string name="show_stats_overlay">پیشاندانی ستاتیستی کارایی</string>
<string name="stats_overlay_customization">خۆڕێکخستن</string> <string name="stats_overlay_customization">خۆڕێکخستن</string>

View file

@ -7,7 +7,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(Vylepšený)</string> <string name="enhanced_fps_suffix">(Vylepšený)</string>
<string name="skipping_fps_suffix">(Přeskakování)</string>
<string name="system_info_label">Systém:</string> <string name="system_info_label">Systém:</string>
<string name="show_stats_overlay">Zobrazit překryv statistik výkonu</string> <string name="show_stats_overlay">Zobrazit překryv statistik výkonu</string>
<string name="stats_overlay_customization">Přizpůsobení</string> <string name="stats_overlay_customization">Přizpůsobení</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(Enhanced)</string> <string name="enhanced_fps_suffix">(Enhanced)</string>
<string name="skipping_fps_suffix">(Skipping)</string>
<string name="system_info_label">System:</string> <string name="system_info_label">System:</string>
<string name="show_stats_overlay">Leistungsstatistik Overlay anzeigen</string> <string name="show_stats_overlay">Leistungsstatistik Overlay anzeigen</string>
<string name="stats_overlay_customization">Anpassung</string> <string name="stats_overlay_customization">Anpassung</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(Mejorado)</string> <string name="enhanced_fps_suffix">(Mejorado)</string>
<string name="skipping_fps_suffix">(Saltando)</string>
<string name="system_info_label">Sistema:</string> <string name="system_info_label">Sistema:</string>
<string name="show_stats_overlay">Mostrar superposición de estadísticas de rendimiento</string> <string name="show_stats_overlay">Mostrar superposición de estadísticas de rendimiento</string>
<string name="stats_overlay_customization">Personalización</string> <string name="stats_overlay_customization">Personalización</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(بهبودیافته)</string> <string name="enhanced_fps_suffix">(بهبودیافته)</string>
<string name="skipping_fps_suffix">(رد کردن)</string>
<string name="system_info_label">سیستم:</string> <string name="system_info_label">سیستم:</string>
<string name="show_stats_overlay">نمایش آمار عملکرد</string> <string name="show_stats_overlay">نمایش آمار عملکرد</string>
<string name="stats_overlay_customization">سفارشی‌سازی</string> <string name="stats_overlay_customization">سفارشی‌سازی</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(Amélioré)</string> <string name="enhanced_fps_suffix">(Amélioré)</string>
<string name="skipping_fps_suffix">(Saut)</string>
<string name="system_info_label">Système:</string> <string name="system_info_label">Système:</string>
<string name="show_stats_overlay">Afficher les stats de performance</string> <string name="show_stats_overlay">Afficher les stats de performance</string>
<string name="stats_overlay_customization">Personnalisation</string> <string name="stats_overlay_customization">Personnalisation</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(משופר)</string> <string name="enhanced_fps_suffix">(משופר)</string>
<string name="skipping_fps_suffix">(דילוג)</string>
<string name="system_info_label">מערכת:</string> <string name="system_info_label">מערכת:</string>
<string name="show_stats_overlay">הצג סטטיסטיקות ביצועים</string> <string name="show_stats_overlay">הצג סטטיסטיקות ביצועים</string>
<string name="stats_overlay_customization">התאמה אישית</string> <string name="stats_overlay_customization">התאמה אישית</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(Továbbfejlesztett)</string> <string name="enhanced_fps_suffix">(Továbbfejlesztett)</string>
<string name="skipping_fps_suffix">(Kihagyás)</string>
<string name="system_info_label">Rendszer:</string> <string name="system_info_label">Rendszer:</string>
<string name="show_stats_overlay">Teljesítmény statisztikák megjelenítése</string> <string name="show_stats_overlay">Teljesítmény statisztikák megjelenítése</string>
<string name="stats_overlay_customization">Testreszabás</string> <string name="stats_overlay_customization">Testreszabás</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(Ditingkatkan)</string> <string name="enhanced_fps_suffix">(Ditingkatkan)</string>
<string name="skipping_fps_suffix">(Melewatkan)</string>
<string name="system_info_label">Sistem:</string> <string name="system_info_label">Sistem:</string>
<string name="show_stats_overlay">Tampilkan Overlay Statistik Performa</string> <string name="show_stats_overlay">Tampilkan Overlay Statistik Performa</string>
<string name="stats_overlay_customization">Kustomisasi</string> <string name="stats_overlay_customization">Kustomisasi</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(Migliorato)</string> <string name="enhanced_fps_suffix">(Migliorato)</string>
<string name="skipping_fps_suffix">(Salto)</string>
<string name="system_info_label">Sistema:</string> <string name="system_info_label">Sistema:</string>
<string name="show_stats_overlay">Mostra overlay prestazioni</string> <string name="show_stats_overlay">Mostra overlay prestazioni</string>
<string name="stats_overlay_customization">Personalizzazione</string> <string name="stats_overlay_customization">Personalizzazione</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(強化)</string> <string name="enhanced_fps_suffix">(強化)</string>
<string name="skipping_fps_suffix">(スキップ)</string>
<string name="system_info_label">システム:</string> <string name="system_info_label">システム:</string>
<string name="show_stats_overlay">パフォーマンス統計オーバーレイを表示</string> <string name="show_stats_overlay">パフォーマンス統計オーバーレイを表示</string>
<string name="stats_overlay_customization">カスタマイズ</string> <string name="stats_overlay_customization">カスタマイズ</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(향상됨)</string> <string name="enhanced_fps_suffix">(향상됨)</string>
<string name="skipping_fps_suffix">(건너뜀)</string>
<string name="system_info_label">시스템:</string> <string name="system_info_label">시스템:</string>
<string name="show_stats_overlay">성능 통계 오버레이 표시</string> <string name="show_stats_overlay">성능 통계 오버레이 표시</string>
<string name="stats_overlay_customization">사용자 지정</string> <string name="stats_overlay_customization">사용자 지정</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(Forbedret)</string> <string name="enhanced_fps_suffix">(Forbedret)</string>
<string name="skipping_fps_suffix">(Hopp)</string>
<string name="system_info_label">System:</string> <string name="system_info_label">System:</string>
<string name="show_stats_overlay">Vis ytelsesstatistikkoverlay</string> <string name="show_stats_overlay">Vis ytelsesstatistikkoverlay</string>
<string name="stats_overlay_customization">Tilpasning</string> <string name="stats_overlay_customization">Tilpasning</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(Ulepszony)</string> <string name="enhanced_fps_suffix">(Ulepszony)</string>
<string name="skipping_fps_suffix">(Pomijanie)</string>
<string name="system_info_label">System:</string> <string name="system_info_label">System:</string>
<string name="show_stats_overlay">Pokaż nakładkę statystyk wydajności</string> <string name="show_stats_overlay">Pokaż nakładkę statystyk wydajności</string>
<string name="stats_overlay_customization">Dostosowanie</string> <string name="stats_overlay_customization">Dostosowanie</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(Aprimorado)</string> <string name="enhanced_fps_suffix">(Aprimorado)</string>
<string name="skipping_fps_suffix">(Pular)</string>
<string name="system_info_label">Sistema:</string> <string name="system_info_label">Sistema:</string>
<string name="show_stats_overlay">Mostrar sobreposição de estatísticas de desempenho</string> <string name="show_stats_overlay">Mostrar sobreposição de estatísticas de desempenho</string>
<string name="stats_overlay_customization">Personalização</string> <string name="stats_overlay_customization">Personalização</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(Melhorado)</string> <string name="enhanced_fps_suffix">(Melhorado)</string>
<string name="skipping_fps_suffix">(Saltar)</string>
<string name="system_info_label">Sistema:</string> <string name="system_info_label">Sistema:</string>
<string name="show_stats_overlay">Mostrar Overlay de Desempenho</string> <string name="show_stats_overlay">Mostrar Overlay de Desempenho</string>
<string name="stats_overlay_customization">Personalização</string> <string name="stats_overlay_customization">Personalização</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(Улучшенный)</string> <string name="enhanced_fps_suffix">(Улучшенный)</string>
<string name="skipping_fps_suffix">(Пропуск)</string>
<string name="system_info_label">Система:</string> <string name="system_info_label">Система:</string>
<string name="show_stats_overlay">Показать оверлей статистики</string> <string name="show_stats_overlay">Показать оверлей статистики</string>
<string name="stats_overlay_customization">Настройки</string> <string name="stats_overlay_customization">Настройки</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(Покращений)</string> <string name="enhanced_fps_suffix">(Покращений)</string>
<string name="skipping_fps_suffix">(Пропуск)</string>
<string name="system_info_label">Система:</string> <string name="system_info_label">Система:</string>
<string name="show_stats_overlay">Показати накладання статистики</string> <string name="show_stats_overlay">Показати накладання статистики</string>
<string name="stats_overlay_customization">Налаштування</string> <string name="stats_overlay_customization">Налаштування</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(Nâng cao)</string> <string name="enhanced_fps_suffix">(Nâng cao)</string>
<string name="skipping_fps_suffix">(Bỏ qua)</string>
<string name="system_info_label">Hệ thống:</string> <string name="system_info_label">Hệ thống:</string>
<string name="show_stats_overlay">Hiển thị thống kê hiệu suất</string> <string name="show_stats_overlay">Hiển thị thống kê hiệu suất</string>
<string name="stats_overlay_customization">Tùy chỉnh</string> <string name="stats_overlay_customization">Tùy chỉnh</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(增强)</string> <string name="enhanced_fps_suffix">(增强)</string>
<string name="skipping_fps_suffix">(跳过)</string>
<string name="system_info_label">系统:</string> <string name="system_info_label">系统:</string>
<string name="show_stats_overlay">显示性能统计悬浮窗</string> <string name="show_stats_overlay">显示性能统计悬浮窗</string>
<string name="stats_overlay_customization">自定义</string> <string name="stats_overlay_customization">自定义</string>

View file

@ -8,7 +8,6 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(增強)</string> <string name="enhanced_fps_suffix">(增強)</string>
<string name="skipping_fps_suffix">(跳過)</string>
<string name="system_info_label">系統:</string> <string name="system_info_label">系統:</string>
<string name="show_stats_overlay">顯示效能統計疊加層</string> <string name="show_stats_overlay">顯示效能統計疊加層</string>
<string name="stats_overlay_customization">自訂</string> <string name="stats_overlay_customization">自訂</string>

View file

@ -21,6 +21,18 @@
<item>1</item> <item>1</item>
</integer-array> </integer-array>
<string-array name="memoryNames">
<item>@string/memory_4gb</item>
<item>@string/memory_6gb</item>
<item>@string/memory_8gb</item>
</string-array>
<integer-array name="memoryValues">
<item>0</item>
<item>1</item>
<item>2</item>
</integer-array>
<string-array name="languageNames"> <string-array name="languageNames">
<item>@string/language_brazilian_portuguese</item> <item>@string/language_brazilian_portuguese</item>
<item>@string/language_british_english</item> <item>@string/language_british_english</item>

View file

@ -11,9 +11,10 @@
<!-- Stats Overlay settings --> <!-- Stats Overlay settings -->
<string name="enhanced_fps_suffix">(Enhanced)</string> <string name="enhanced_fps_suffix">(Enhanced)</string>
<string name="skipping_fps_suffix">(Skipping)</string> <string name="shaders_prefix">Building</string>
<string name="shaders_suffix">Shader(s)</string>
<string name="system_info_label">System:</string> <string name="system_info_label">System:</string>
<string name="show_stats_overlay">ShoW Performance Stats Overlay</string> <string name="show_stats_overlay">Show Performance Stats Overlay</string>
<string name="stats_overlay_customization">Customization</string> <string name="stats_overlay_customization">Customization</string>
<string name="stats_overlay_items">Visibility</string> <string name="stats_overlay_items">Visibility</string>
<string name="stats_overlay_options">Overlay</string> <string name="stats_overlay_options">Overlay</string>
@ -31,6 +32,8 @@
<string name="show_system_ram_usage_description">Display the amount of RAM used by the system</string> <string name="show_system_ram_usage_description">Display the amount of RAM used by the system</string>
<string name="show_bat_temperature">Show Battery Temperature</string> <string name="show_bat_temperature">Show Battery Temperature</string>
<string name="show_bat_temperature_description">Display current Battery temperature in Celsius and Fahrenheit</string> <string name="show_bat_temperature_description">Display current Battery temperature in Celsius and Fahrenheit</string>
<string name="show_shaders_building">Show Shaders Building</string>
<string name="show_shaders_building_description">Display current number of shaders being built</string>
<string name="overlay_position">Overlay Position</string> <string name="overlay_position">Overlay Position</string>
<string name="overlay_position_description">Choose where the performance stats overlay is displayed on the screen</string> <string name="overlay_position_description">Choose where the performance stats overlay is displayed on the screen</string>
<string name="overlay_position_top_left">Top Left</string> <string name="overlay_position_top_left">Top Left</string>
@ -44,23 +47,35 @@
<!-- Eden`s Veil --> <!-- Eden`s Veil -->
<string name="eden_veil">Edens Veil</string> <string name="eden_veil">Edens Veil</string>
<string name="eden_veil_description">Beyond default</string> <string name="eden_veil_description">Experimental settings to improve performance and capability. These settings may cause black screens or other game issues.</string>
<string name="frame_interpolation">Enhanced Frame Pacing</string> <string name="eden_veil_warning_title">Experimental Settings</string>
<string name="frame_interpolation_description">Ensures smooth and consistent frame delivery by synchronizing the timing between frames, reducing stuttering and uneven animation. Ideal for games that experience frame timing instability or micro-stutters during gameplay.</string> <string name="eden_veil_warning_description">The settings contained within Eden\'s Veil are highly experimental and may cause issues. If your game does not boot, disable any extensions and change Extended Dynamic State to 0.</string>
<string name="veil_extensions">GPU Extensions</string>
<string name="dyna_state">Extended Dynamic State</string> <string name="dyna_state">Extended Dynamic State</string>
<string name="dyna_state_description">Enables Vulkan features to improve performance, rendering, and save resources on pipeline creation while maintaining lower CPU/GPU usage. These extensions may increase device temperature, and GPUs belonging to the older A6XX line may not react properly. Set to 0 to use Legacy emulated formats.</string> <string name="dyna_state_description">Enables Vulkan features to improve performance, rendering, and save resources on pipeline creation while maintaining lower CPU/GPU usage. These extensions may increase device temperature, and GPUs belonging to the older A6XX line may not react properly. Set to 0 to use Legacy emulated formats.</string>
<string name="use_sync_core">Synchronize Core Speed</string> <string name="provoking_vertex">Provoking Vertex</string>
<string name="use_sync_core_description">Synchronize the core tick speed to the maximum speed percentage to improve performance without altering the game\'s actual speed.</string> <string name="provoking_vertex_description">Improves lighting and vertex handling in certain games. Only supported on Vulkan 1.0+ GPUs.</string>
<string name="descriptor_indexing">Descriptor Indexing</string>
<string name="descriptor_indexing_description">Improves texture and buffer handling, as well as the Maxwell translation layer. Supported by some Vulkan 1.1 GPUs and all Vulkan 1.2+ GPUs.</string>
<string name="veil_renderer">Renderer</string>
<string name="frame_interpolation">Enhanced Frame Pacing</string>
<string name="frame_interpolation_description">Ensures smooth and consistent frame delivery by synchronizing the timing between frames, reducing stuttering and uneven animation. Ideal for games that experience frame timing instability or micro-stutters during gameplay.</string>
<string name="use_auto_stub">Use Auto Stub</string> <string name="use_auto_stub">Use Auto Stub</string>
<string name="use_auto_stub_description">Automatically stub missing services and functions. This may improve compatibility but can cause crashes and stability issues.</string> <string name="use_auto_stub_description">Automatically stub missing services and functions. This may improve compatibility but can cause crashes and stability issues.</string>
<string name="uninstall_firmware">Uninstall firmware</string> <string name="uninstall_firmware">Uninstall firmware</string>
<string name="uninstall_firmware_description">Uninstalling the firmware will remove it from the device and may affect game compatibility.</string> <string name="uninstall_firmware_description">Uninstalling the firmware will remove it from the device and may affect game compatibility.</string>
<string name="firmware_uninstalling">Uninstalling firmware</string> <string name="firmware_uninstalling">Uninstalling firmware</string>
<string name="firmware_uninstalled_success">Firmware uninstalled successfully</string> <string name="firmware_uninstalled_success">Firmware uninstalled successfully</string>
<string name="provoking_vertex">Provoking Vertex</string>
<string name="provoking_vertex_description">Improves lighting and vertex handling in certain games. Only supported on Vulkan 1.0+ GPUs.</string> <string name="veil_misc">Miscellaneous</string>
<string name="descriptor_indexing">Descriptor Indexing</string> <string name="use_sync_core">Synchronize Core Speed</string>
<string name="descriptor_indexing_description">Improves texture and buffer handling, as well as the Maxwell translation layer. Supported by some Vulkan 1.1 GPUs and all Vulkan 1.2+ GPUs.</string> <string name="use_sync_core_description">Synchronize the core tick speed to the maximum speed percentage to improve performance without altering the game\'s actual speed.</string>
<string name="use_lru_cache">Enable LRU Cache</string>
<string name="use_lru_cache_description">Enable or disable the Least Recently Used (LRU) cache, increasing performance by saving CPU process usage. Some games have issue with it, notably TotK 1.2.1, so disable if the game doesn\'t boot or crashes randomly.</string>
<string name="memory_layout">Memory Layout</string>
<string name="memory_layout_description">(EXPERIMENTAL) Change the emulated memory layout. This setting will not increase performance, but may help with games utilizing high resolutions via mods. Do not use on phones with 8GB of RAM or less.</string>
<!-- Shader Backend --> <!-- Shader Backend -->
<string name="shader_backend">Shader Backend</string> <string name="shader_backend">Shader Backend</string>
@ -404,12 +419,18 @@
<string name="cpu">CPU</string> <string name="cpu">CPU</string>
<string name="cpu_debug_mode">CPU Debugging</string> <string name="cpu_debug_mode">CPU Debugging</string>
<string name="cpu_debug_mode_description">Puts the CPU in a slow debugging mode.</string> <string name="cpu_debug_mode_description">Puts the CPU in a slow debugging mode.</string>
<string name="gpu">GPU</string> <string name="gpu">GPU</string>
<string name="renderer_api">API</string> <string name="renderer_api">API</string>
<string name="renderer_debug">Graphics debugging</string> <string name="renderer_debug">Graphics debugging</string>
<string name="renderer_debug_description">Sets the graphics API to a slow debugging mode.</string> <string name="renderer_debug_description">Sets the graphics API to a slow debugging mode.</string>
<string name="fastmem">Fastmem</string> <string name="fastmem">Fastmem</string>
<string name="log">Logging</string>
<string name="flush_by_line">Flush debug logs by line</string>
<string name="flush_by_line_description">Flushes debugging logs on each line written, making debugging easier in cases of crashing or freezing.</string>
<!-- Audio settings strings --> <!-- Audio settings strings -->
<string name="audio_output_engine">Output engine</string> <string name="audio_output_engine">Output engine</string>
<string name="audio_volume">Volume</string> <string name="audio_volume">Volume</string>
@ -678,6 +699,11 @@
<string name="region_korea">Korea</string> <string name="region_korea">Korea</string>
<string name="region_taiwan">Taiwan</string> <string name="region_taiwan">Taiwan</string>
<!-- Memory Layouts -->
<string name="memory_4gb">4GB (Recommended)</string>
<string name="memory_6gb">6GB (Unsafe)</string>
<string name="memory_8gb">8GB (Unsafe)</string>
<!-- Language Names --> <!-- Language Names -->
<string name="language_japanese" translatable="false">日本語</string> <string name="language_japanese" translatable="false">日本語</string>
<string name="language_english" translatable="false">English</string> <string name="language_english" translatable="false">English</string>
@ -749,10 +775,6 @@
<string name="resolution_three">3X (2160p/3240p) (Slow)</string> <string name="resolution_three">3X (2160p/3240p) (Slow)</string>
<string name="resolution_four">4X (2880p/4320p) (Slow)</string> <string name="resolution_four">4X (2880p/4320p) (Slow)</string>
<!-- LRU Cache -->
<string name="use_lru_cache">Enable LRU Cache</string>
<string name="use_lru_cache_description">Enable or disable the Least Recently Used (LRU) cache, increasing performance by saving CPU process usage. Some games have issue with it, notably TotK 1.2.1, so disable if the game doesn\'t boot or crashes randomly.</string>
<!-- Renderer VSync --> <!-- Renderer VSync -->
<string name="renderer_vsync_immediate">Immediate (Off)</string> <string name="renderer_vsync_immediate">Immediate (Off)</string>
<string name="renderer_vsync_mailbox">Mailbox</string> <string name="renderer_vsync_mailbox">Mailbox</string>

View file

@ -202,7 +202,7 @@ RendererVulkan::~RendererVulkan() {
#ifdef __ANDROID__ #ifdef __ANDROID__
class BooleanSetting { class BooleanSetting {
public: public:
static BooleanSetting FRAME_SKIPPING; // static BooleanSetting FRAME_SKIPPING;
static BooleanSetting FRAME_INTERPOLATION; static BooleanSetting FRAME_INTERPOLATION;
explicit BooleanSetting(bool initial_value = false) : value(initial_value) {} explicit BooleanSetting(bool initial_value = false) : value(initial_value) {}
@ -219,13 +219,13 @@ class BooleanSetting {
}; };
// Initialize static members // Initialize static members
BooleanSetting BooleanSetting::FRAME_SKIPPING(false); // BooleanSetting BooleanSetting::FRAME_SKIPPING(false);
BooleanSetting BooleanSetting::FRAME_INTERPOLATION(false); BooleanSetting BooleanSetting::FRAME_INTERPOLATION(false);
extern "C" JNIEXPORT jboolean JNICALL // extern "C" JNIEXPORT jboolean JNICALL
Java_org_uzuy_uzuy_1emu_features_settings_model_BooleanSetting_isFrameSkippingEnabled(JNIEnv* env, jobject /* this */) { // Java_org_uzuy_uzuy_1emu_features_settings_model_BooleanSetting_isFrameSkippingEnabled(JNIEnv* env, jobject /* this */) {
return static_cast<jboolean>(BooleanSetting::FRAME_SKIPPING.getBoolean()); // return static_cast<jboolean>(BooleanSetting::FRAME_SKIPPING.getBoolean());
} // }
extern "C" JNIEXPORT jboolean JNICALL extern "C" JNIEXPORT jboolean JNICALL
Java_org_uzuy_uzuy_1emu_features_settings_model_BooleanSetting_isFrameInterpolationEnabled(JNIEnv* env, jobject /* this */) { Java_org_uzuy_uzuy_1emu_features_settings_model_BooleanSetting_isFrameInterpolationEnabled(JNIEnv* env, jobject /* this */) {
@ -310,7 +310,7 @@ void RendererVulkan::Composite(std::span<const Tegra::FramebufferConfig> framebu
static int target_fps = 60; // Target FPS (30 or 60) static int target_fps = 60; // Target FPS (30 or 60)
int frame_skip_threshold = 1; int frame_skip_threshold = 1;
bool frame_skipping = BooleanSetting::FRAME_SKIPPING.getBoolean(); bool frame_skipping = false; //BooleanSetting::FRAME_SKIPPING.getBoolean();
bool frame_interpolation = BooleanSetting::FRAME_INTERPOLATION.getBoolean(); bool frame_interpolation = BooleanSetting::FRAME_INTERPOLATION.getBoolean();
#endif #endif