mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2025-10-17 02:07:51 +00:00
Android: add FRAME_SKIPPING and FRAME_INTERPOLATION
This commit is contained in:
parent
f9f311c014
commit
d25bea5762
8 changed files with 155 additions and 6 deletions
|
@ -26,7 +26,13 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting {
|
|||
SHOW_PERFORMANCE_OVERLAY("show_performance_overlay"),
|
||||
SHOW_INPUT_OVERLAY("show_input_overlay"),
|
||||
TOUCHSCREEN("touchscreen"),
|
||||
SHOW_THERMAL_OVERLAY("show_thermal_overlay");
|
||||
SHOW_THERMAL_OVERLAY("show_thermal_overlay"),
|
||||
ENABLE_FRAME_INTERPOLATION("enable_frame_interpolation"),
|
||||
ENABLE_FRAME_SKIPPING("enable_frame_skipping"),
|
||||
CORE_USE_MULTI_CORE("use_multi_core");
|
||||
|
||||
external fun isFrameSkippingEnabled(): Boolean
|
||||
external fun isFrameInterpolationEnabled(): Boolean
|
||||
|
||||
override fun getBoolean(needsGlobal: Boolean): Boolean =
|
||||
NativeConfig.getBoolean(key, needsGlobal)
|
||||
|
|
|
@ -172,6 +172,56 @@ abstract class SettingsItem(
|
|||
|
||||
override fun reset() = BooleanSetting.USE_DOCKED_MODE.reset()
|
||||
}
|
||||
val enableInterpolationSetting = object : AbstractBooleanSetting {
|
||||
override val key = BooleanSetting.ENABLE_FRAME_INTERPOLATION.key
|
||||
|
||||
override fun getBoolean(needsGlobal: Boolean): Boolean =
|
||||
BooleanSetting.ENABLE_FRAME_INTERPOLATION.getBoolean(needsGlobal)
|
||||
|
||||
override fun setBoolean(value: Boolean) =
|
||||
BooleanSetting.ENABLE_FRAME_INTERPOLATION.setBoolean(value)
|
||||
|
||||
override val defaultValue = BooleanSetting.ENABLE_FRAME_INTERPOLATION.defaultValue
|
||||
|
||||
override fun getValueAsString(needsGlobal: Boolean): String =
|
||||
BooleanSetting.ENABLE_FRAME_INTERPOLATION.getValueAsString(needsGlobal)
|
||||
|
||||
override fun reset() = BooleanSetting.ENABLE_FRAME_INTERPOLATION.reset()
|
||||
}
|
||||
|
||||
val enableFrameSkippingSetting = object : AbstractBooleanSetting {
|
||||
override val key = BooleanSetting.ENABLE_FRAME_SKIPPING.key
|
||||
|
||||
override fun getBoolean(needsGlobal: Boolean): Boolean =
|
||||
BooleanSetting.ENABLE_FRAME_SKIPPING.getBoolean(needsGlobal)
|
||||
|
||||
override fun setBoolean(value: Boolean) =
|
||||
BooleanSetting.ENABLE_FRAME_SKIPPING.setBoolean(value)
|
||||
|
||||
override val defaultValue = BooleanSetting.ENABLE_FRAME_SKIPPING.defaultValue
|
||||
|
||||
override fun getValueAsString(needsGlobal: Boolean): String =
|
||||
BooleanSetting.ENABLE_FRAME_SKIPPING.getValueAsString(needsGlobal)
|
||||
|
||||
override fun reset() = BooleanSetting.ENABLE_FRAME_SKIPPING.reset()
|
||||
}
|
||||
|
||||
put(
|
||||
SwitchSetting(
|
||||
BooleanSetting.ENABLE_FRAME_INTERPOLATION,
|
||||
titleId = R.string.enable_frame_interpolation,
|
||||
descriptionId = R.string.enable_frame_interpolation_description
|
||||
)
|
||||
)
|
||||
|
||||
put(
|
||||
SwitchSetting(
|
||||
BooleanSetting.ENABLE_FRAME_SKIPPING,
|
||||
titleId = R.string.enable_frame_skipping,
|
||||
descriptionId = R.string.enable_frame_skipping_description
|
||||
)
|
||||
)
|
||||
|
||||
put(
|
||||
SwitchSetting(
|
||||
dockedModeSetting,
|
||||
|
|
|
@ -169,6 +169,8 @@ class SettingsFragmentPresenter(
|
|||
|
||||
private fun addGraphicsSettings(sl: ArrayList<SettingsItem>) {
|
||||
sl.apply {
|
||||
add(BooleanSetting.ENABLE_FRAME_INTERPOLATION.key)
|
||||
add(BooleanSetting.ENABLE_FRAME_SKIPPING.key)
|
||||
add(IntSetting.RENDERER_ACCURACY.key)
|
||||
add(IntSetting.RENDERER_RESOLUTION.key)
|
||||
add(IntSetting.RENDERER_VSYNC.key)
|
||||
|
|
|
@ -534,10 +534,18 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
|||
// Calculate used memory
|
||||
val usedMegs = (mi.totalMem - mi.availMem) / 1048576L // Convert bytes to megabytes
|
||||
|
||||
val actualFps = perfStats[FPS]
|
||||
val enableFrameInterpolation = BooleanSetting.ENABLE_FRAME_INTERPOLATION.getBoolean()
|
||||
val generatedFpsText = if (enableFrameInterpolation) {
|
||||
val generatedFps = actualFps * 2
|
||||
String.format("(Generated: %.1f)", generatedFps)
|
||||
} else {
|
||||
""
|
||||
}
|
||||
if (_binding != null) {
|
||||
binding.showFpsText.text = String.format(
|
||||
"%.1f FPS • %d MB • %s/%s",
|
||||
perfStats[FPS], usedMegs, cpuBackend, gpuDriver
|
||||
"%.1f %s FPS • %d MB • %s/%s",
|
||||
actualFps, generatedFpsText, usedMegs, cpuBackend, gpuDriver
|
||||
)
|
||||
}
|
||||
perfStatsUpdateHandler.postDelayed(perfStatsUpdater!!, 800)
|
||||
|
|
|
@ -230,6 +230,10 @@
|
|||
<string name="set_custom_rtc">Set custom RTC</string>
|
||||
|
||||
<!-- Graphics settings strings -->
|
||||
<string name="enable_frame_skipping">Enable Frame Skipping</string>
|
||||
<string name="enable_frame_skipping_description">Toggle frame skipping to improve performance by reducing the number of rendered frames.</string>
|
||||
<string name="enable_frame_interpolation">Enable Frame Interpolation</string>
|
||||
<string name="enable_frame_interpolation_description">Toggle frame interpolation to improve visual smoothness by generating intermediate frames.</string>
|
||||
<string name="renderer_accuracy">Accuracy level</string>
|
||||
<string name="renderer_resolution">Resolution (Handheld/Docked)</string>
|
||||
<string name="renderer_vsync">VSync mode</string>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue