Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 19 additions & 2 deletions app/src/main/cpp/libretro_frontend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ std::string rom_runtime_path;
std::string rom_runtime_directory;
bool core_initialized = false;
bool game_loaded = false;
bool frame_rate_enhancement_enabled = false;
std::atomic<bool> shutdown_requested{false};

void core_log(unsigned level, const char *message) {
Expand Down Expand Up @@ -124,8 +125,21 @@ bool environment(unsigned command, void *data) {
case ENV_GET_VARIABLE_UPDATE:
if (data != nullptr) *static_cast<bool *>(data) = false;
return true;
case ENV_GET_VARIABLE:
case ENV_GET_VARIABLE: {
if (data == nullptr) return false;
auto *variable = static_cast<retro_variable *>(data);
if (variable->key == nullptr) return false;
if (std::strcmp(
variable->key,
"dingooemu_frame_rate_enhancement"
) == 0) {
variable->value = frame_rate_enhancement_enabled
? "enabled"
: "disabled";
return true;
}
return false;
}
case ENV_GET_LOG_INTERFACE:
if (data == nullptr) return false;
static_cast<retro_log_callback *>(data)->log = core_log;
Expand Down Expand Up @@ -274,6 +288,7 @@ void shutdown_core() {
release_rom_runtime_file();
input_mask.store(0, std::memory_order_relaxed);
shutdown_requested.store(false, std::memory_order_relaxed);
frame_rate_enhancement_enabled = false;
}

} // namespace
Expand All @@ -284,10 +299,12 @@ Java_io_github_uplush_dingoobox_NativeBridge_nativeInitialize(
jobject,
jbyteArray rom_data_value,
jstring rom_name_value,
jstring save_directory_value
jstring save_directory_value,
jboolean frame_rate_enhancement_value
) {
std::lock_guard lock(core_mutex);
shutdown_core();
frame_rate_enhancement_enabled = frame_rate_enhancement_value == JNI_TRUE;
if (rom_data_value == nullptr) return JNI_FALSE;

const std::string rom_name = from_jstring(env, rom_name_value);
Expand Down
11 changes: 10 additions & 1 deletion app/src/main/java/io/github/uplush/dingoobox/AppPreferences.kt
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ data class AppSettingsState(
val volumePercent: Int = 100,
val soundSofteningEnabled: Boolean = false,
val soundSofteningPercent: Int = 60,
val frameRateEnhancementEnabled: Boolean = false,
val autoSaveEnabled: Boolean = false,
val fastForwardMultiplier: Int = 2,
val virtualControlsVisible: Boolean = true,
Expand Down Expand Up @@ -87,6 +88,10 @@ class AppPreferences(context: Context) {
soundSofteningPercent = preferences
.getInt("sound_softening_level_percent", 60)
.coerceIn(5, 95),
frameRateEnhancementEnabled = preferences.getBoolean(
"frame_rate_enhancement_enabled",
false
),
autoSaveEnabled = preferences.getBoolean("auto_save_state_enabled", false),
fastForwardMultiplier = normalizeFastForwardMultiplier(
preferences.getInt("fast_forward_multiplier", 2)
Expand Down Expand Up @@ -114,6 +119,10 @@ class AppPreferences(context: Context) {
"sound_softening_level_percent",
settings.soundSofteningPercent.coerceIn(5, 95)
)
putBoolean(
"frame_rate_enhancement_enabled",
settings.frameRateEnhancementEnabled
)
putBoolean("auto_save_state_enabled", settings.autoSaveEnabled)
putInt(
"fast_forward_multiplier",
Expand Down Expand Up @@ -300,7 +309,7 @@ class AppPreferences(context: Context) {

companion object {
private const val SETTINGS_SCHEMA_VERSION_KEY = "dingoo_settings_schema_version"
private const val SETTINGS_SCHEMA_VERSION = 22
private const val SETTINGS_SCHEMA_VERSION = 23

private fun normalizeFastForwardMultiplier(value: Int): Int = when (value) {
0, 2, 3, 4 -> value
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ fun EmulationScreen(
romData = repository.readGame(game).getOrNull(),
romName = game.fileName,
saveDirectory = repository.savesDirectory,
frameRateEnhancementEnabled = settings.frameRateEnhancementEnabled,
bitmap = bitmap,
view = bitmapView,
onCoreShutdown = {
Expand Down Expand Up @@ -1031,6 +1032,7 @@ private class EmulationSession(
romData: ByteArray?,
romName: String,
saveDirectory: File,
frameRateEnhancementEnabled: Boolean,
private val bitmap: Bitmap,
private val view: View,
private val onCoreShutdown: () -> Unit
Expand Down Expand Up @@ -1061,7 +1063,8 @@ private class EmulationSession(
initialized = romData != null && NativeBridge.nativeInitialize(
romData,
romName,
saveDirectory.absolutePath
saveDirectory.absolutePath,
frameRateEnhancementEnabled
)
audioTrack = if (initialized) createAudioTrack() else null
}
Expand Down
3 changes: 2 additions & 1 deletion app/src/main/java/io/github/uplush/dingoobox/NativeBridge.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ object NativeBridge {
external fun nativeInitialize(
romData: ByteArray,
romName: String,
saveDirectory: String
saveDirectory: String,
frameRateEnhancementEnabled: Boolean
): Boolean
external fun nativeRunFrame(bitmap: Bitmap, audioBuffer: ShortArray): Int
external fun nativeSetButton(buttonId: Int, pressed: Boolean)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,14 @@ private fun ColumnScope.AdvancedSettings(
update: (AppSettingsState) -> Unit,
onFastForward: () -> Unit
) {
SwitchSettingRow(
title = appStringResource(R.string.settings_frame_rate_enhancement_title),
description = appStringResource(R.string.settings_frame_rate_enhancement_description),
checked = settings.frameRateEnhancementEnabled,
enabled = !embeddedInPauseMenu,
onCheckedChange = { update(settings.copy(frameRateEnhancementEnabled = it)) }
)
HorizontalDivider()
SwitchSettingRow(
title = appStringResource(R.string.settings_auto_save_title),
description = appStringResource(
Expand Down
Binary file modified app/src/main/jniLibs/arm64-v8a/libdingooemu.so
Binary file not shown.
2 changes: 2 additions & 0 deletions app/src/main/res/values-zh-rCN/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@
<string name="settings_auto_save_title">退出时自动保存</string>
<string name="settings_auto_save_description">退出游戏时自动创建恢复存档</string>
<string name="settings_auto_save_game_only_description">仅在游戏中可以调整该设置</string>
<string name="settings_frame_rate_enhancement_title">帧率增强</string>
<string name="settings_frame_rate_enhancement_description">提升部分游戏帧率</string>
<string name="settings_fast_forward_multiplier_title">游戏加速倍率</string>
<string name="settings_fast_forward_multiplier_description">设置开启游戏加速时的运行速度</string>
<string name="fast_forward_unlimited">不限制</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@
<string name="settings_auto_save_title">Auto-save on exit</string>
<string name="settings_auto_save_description">Automatically create a recovery save state when exiting a game</string>
<string name="settings_auto_save_game_only_description">This setting can only be adjusted while a game is running</string>
<string name="settings_frame_rate_enhancement_title">Frame rate enhancement</string>
<string name="settings_frame_rate_enhancement_description">Improve frame rates in supported games</string>
<string name="settings_fast_forward_multiplier_title">Fast-forward multiplier</string>
<string name="settings_fast_forward_multiplier_description">Set the running speed used when fast-forward is enabled</string>
<string name="fast_forward_unlimited">Unlimited</string>
Expand Down
Loading