mirror of
https://git.citron-emu.org/citron/emulator
synced 2026-01-08 02:37:56 +00:00
feat: Add frame generation and enhance UE4 game compatibility
- Add frame generation settings (enabled/disabled, interpolation/extrapolation modes) - Add frame skipping settings (enabled/disabled, adaptive/fixed modes) - Implement frame skipping logic with adaptive and fixed modes - Enhance UE4 crash handling with recovery mechanisms - Add support for signed and float 32-bit image formats across shader backends - Update Vulkan Validation Layers to v1.4.321.0 - Fix duplicate frame skipping options in Qt UI - Improve memory handling for UE4 games (Hogwarts Legacy compatibility) - Add enhanced bindless texture handling with fallback approach - Update Android build configuration and dependencies Signed-off-by: Zephyron <zephyron@citron-emu.org>
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
|
||||
// SPDX-FileCopyrightText: 2025 citron Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
@@ -36,12 +35,12 @@ android {
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_21
|
||||
targetCompatibility = JavaVersion.VERSION_21
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = "21"
|
||||
jvmTarget = "17"
|
||||
}
|
||||
|
||||
packaging {
|
||||
@@ -57,7 +56,6 @@ android {
|
||||
// TODO If this is ever modified, change application_id in strings.xml
|
||||
applicationId = "org.citron.citron_emu"
|
||||
minSdk = 30
|
||||
//noinspection EditedTargetSdkVersion
|
||||
targetSdk = 35
|
||||
versionName = getGitVersion()
|
||||
|
||||
@@ -109,8 +107,8 @@ android {
|
||||
isDefault = true
|
||||
isShrinkResources = true
|
||||
isMinifyEnabled = true
|
||||
isDebuggable = false
|
||||
isJniDebuggable = false
|
||||
isDebuggable = false
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
@@ -162,7 +160,7 @@ android {
|
||||
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
version = "3.31.7"
|
||||
version = "3.31.8"
|
||||
path = file("../../../CMakeLists.txt")
|
||||
}
|
||||
}
|
||||
@@ -182,7 +180,7 @@ android {
|
||||
"-DCMAKE_EXPORT_COMPILE_COMMANDS=ON",
|
||||
"-DCMAKE_POLICY_VERSION_MINIMUM=3.5",
|
||||
"-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON",
|
||||
)
|
||||
)
|
||||
|
||||
abiFilters("arm64-v8a") // , "x86_64")
|
||||
}
|
||||
@@ -197,7 +195,7 @@ tasks.create<Delete>("ktlintReset") {
|
||||
val showFormatHelp = {
|
||||
logger.lifecycle(
|
||||
"If this check fails, please try running \"gradlew ktlintFormat\" for automatic " +
|
||||
"codestyle fixes"
|
||||
"codestyle fixes"
|
||||
)
|
||||
}
|
||||
tasks.getByPath("ktlintKotlinScriptCheck").doFirst { showFormatHelp.invoke() }
|
||||
|
||||
@@ -29,6 +29,10 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
|
||||
VERTICAL_ALIGNMENT("vertical_alignment"),
|
||||
FSR_SHARPENING_SLIDER("fsr_sharpening_slider"),
|
||||
FSR2_QUALITY_MODE("fsr2_quality_mode"),
|
||||
FRAME_GENERATION("frame_generation"),
|
||||
FRAME_GENERATION_MODE("frame_generation_mode"),
|
||||
FRAME_SKIPPING("frame_skipping"),
|
||||
FRAME_SKIPPING_MODE("frame_skipping_mode"),
|
||||
|
||||
// Zep Zone settings
|
||||
MEMORY_LAYOUT_MODE("memory_layout_mode"),
|
||||
|
||||
@@ -443,6 +443,42 @@ abstract class SettingsItem(
|
||||
valuesId = R.array.vramUsageModeValues
|
||||
)
|
||||
)
|
||||
put(
|
||||
SingleChoiceSetting(
|
||||
IntSetting.FRAME_GENERATION,
|
||||
titleId = R.string.frame_generation,
|
||||
descriptionId = R.string.frame_generation_description,
|
||||
choicesId = R.array.frameGenerationNames,
|
||||
valuesId = R.array.frameGenerationValues
|
||||
)
|
||||
)
|
||||
put(
|
||||
SingleChoiceSetting(
|
||||
IntSetting.FRAME_GENERATION_MODE,
|
||||
titleId = R.string.frame_generation_mode,
|
||||
descriptionId = R.string.frame_generation_mode_description,
|
||||
choicesId = R.array.frameGenerationModeNames,
|
||||
valuesId = R.array.frameGenerationModeValues
|
||||
)
|
||||
)
|
||||
put(
|
||||
SingleChoiceSetting(
|
||||
IntSetting.FRAME_SKIPPING,
|
||||
titleId = R.string.frame_skipping,
|
||||
descriptionId = R.string.frame_skipping_description,
|
||||
choicesId = R.array.frameSkippingNames,
|
||||
valuesId = R.array.frameSkippingValues
|
||||
)
|
||||
)
|
||||
put(
|
||||
SingleChoiceSetting(
|
||||
IntSetting.FRAME_SKIPPING_MODE,
|
||||
titleId = R.string.frame_skipping_mode,
|
||||
descriptionId = R.string.frame_skipping_mode_description,
|
||||
choicesId = R.array.frameSkippingModeNames,
|
||||
valuesId = R.array.frameSkippingModeValues
|
||||
)
|
||||
)
|
||||
|
||||
// Applet Mode Settings
|
||||
put(
|
||||
|
||||
@@ -997,6 +997,14 @@ class SettingsFragmentPresenter(
|
||||
add(IntSetting.SHADER_BACKEND.key)
|
||||
add(IntSetting.VRAM_USAGE_MODE.key)
|
||||
|
||||
add(HeaderSetting(R.string.frame_generation_header))
|
||||
add(IntSetting.FRAME_GENERATION.key)
|
||||
add(IntSetting.FRAME_GENERATION_MODE.key)
|
||||
|
||||
add(HeaderSetting(R.string.frame_skipping_header))
|
||||
add(IntSetting.FRAME_SKIPPING.key)
|
||||
add(IntSetting.FRAME_SKIPPING_MODE.key)
|
||||
|
||||
add(HeaderSetting(R.string.applet_settings_header))
|
||||
add(IntSetting.CABINET_APPLET_MODE.key)
|
||||
add(IntSetting.CONTROLLER_APPLET_MODE.key)
|
||||
|
||||
@@ -187,6 +187,46 @@
|
||||
<item>3</item>
|
||||
</integer-array>
|
||||
|
||||
<string-array name="frameGenerationNames">
|
||||
<item>@string/frame_generation_disabled</item>
|
||||
<item>@string/frame_generation_enabled</item>
|
||||
</string-array>
|
||||
|
||||
<integer-array name="frameGenerationValues">
|
||||
<item>0</item>
|
||||
<item>1</item>
|
||||
</integer-array>
|
||||
|
||||
<string-array name="frameGenerationModeNames">
|
||||
<item>@string/frame_generation_mode_interpolation</item>
|
||||
<item>@string/frame_generation_mode_extrapolation</item>
|
||||
</string-array>
|
||||
|
||||
<integer-array name="frameGenerationModeValues">
|
||||
<item>0</item>
|
||||
<item>1</item>
|
||||
</integer-array>
|
||||
|
||||
<string-array name="frameSkippingNames">
|
||||
<item>@string/frame_skipping_disabled</item>
|
||||
<item>@string/frame_skipping_enabled</item>
|
||||
</string-array>
|
||||
|
||||
<integer-array name="frameSkippingValues">
|
||||
<item>0</item>
|
||||
<item>1</item>
|
||||
</integer-array>
|
||||
|
||||
<string-array name="frameSkippingModeNames">
|
||||
<item>@string/frame_skipping_mode_adaptive</item>
|
||||
<item>@string/frame_skipping_mode_fixed</item>
|
||||
</string-array>
|
||||
|
||||
<integer-array name="frameSkippingModeValues">
|
||||
<item>0</item>
|
||||
<item>1</item>
|
||||
</integer-array>
|
||||
|
||||
<string-array name="rendererAntiAliasingNames">
|
||||
<item>@string/anti_aliasing_none</item>
|
||||
<item>@string/anti_aliasing_fxaa</item>
|
||||
|
||||
@@ -424,6 +424,7 @@
|
||||
<string name="astc_settings_header">ASTC Settings</string>
|
||||
<string name="advanced_graphics_header">Advanced Graphics</string>
|
||||
<string name="applet_settings_header">Applet Settings</string>
|
||||
<string name="frame_generation_header">Frame Generation</string>
|
||||
|
||||
<!-- Applet Mode Settings -->
|
||||
<string name="cabinet_applet_mode">Cabinet Applet Mode</string>
|
||||
@@ -1226,5 +1227,22 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
<string name="shader_backend_description">Controls which shader backend to use for rendering.</string>
|
||||
<string name="vram_usage_mode">VRAM Usage Mode</string>
|
||||
<string name="vram_usage_mode_description">Controls how aggressively VRAM is used. Conservative mode limits VRAM usage for better stability.</string>
|
||||
<string name="frame_generation">Frame Generation</string>
|
||||
<string name="frame_generation_description">Enables frame generation to create intermediate frames, potentially doubling the perceived frame rate.</string>
|
||||
<string name="frame_generation_mode">Frame Generation Mode</string>
|
||||
<string name="frame_generation_mode_description">Interpolation creates frames between existing ones, while Extrapolation predicts future frames.</string>
|
||||
<string name="frame_generation_disabled">Disabled</string>
|
||||
<string name="frame_generation_enabled">Enabled</string>
|
||||
<string name="frame_generation_mode_interpolation">Interpolation</string>
|
||||
<string name="frame_generation_mode_extrapolation">Extrapolation</string>
|
||||
<string name="frame_skipping">Frame Skipping</string>
|
||||
<string name="frame_skipping_description">Skips frames to maintain performance when the system cannot keep up with the target frame rate.</string>
|
||||
<string name="frame_skipping_mode">Frame Skipping Mode</string>
|
||||
<string name="frame_skipping_mode_description">Adaptive mode skips frames based on performance, while Fixed mode skips a specific number of frames.</string>
|
||||
<string name="frame_skipping_disabled">Disabled</string>
|
||||
<string name="frame_skipping_enabled">Enabled</string>
|
||||
<string name="frame_skipping_mode_adaptive">Adaptive</string>
|
||||
<string name="frame_skipping_mode_fixed">Fixed</string>
|
||||
<string name="frame_skipping_header">Frame Skipping</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
plugins {
|
||||
id("com.android.application") version "8.10.0" apply false
|
||||
id("com.android.library") version "8.10.0" apply false
|
||||
id("com.android.application") version "8.1.2" apply false
|
||||
id("com.android.library") version "8.1.2" apply false
|
||||
id("org.jetbrains.kotlin.android") version "1.9.20" apply false
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user