Eden’s Veil setting

This commit is contained in:
Pavel Barabanov 2025-04-13 14:43:51 +03:00 committed by MrPurple666
parent bd88a06a5d
commit a04f93108f
7 changed files with 399 additions and 6 deletions

View file

@ -11,6 +11,11 @@ enum class IntSetting(override val key: String) : AbstractIntSetting {
REGION_INDEX("region_index"),
LANGUAGE_INDEX("language_index"),
RENDERER_BACKEND("backend"),
RENDERER_VRAM_USAGE_MODE("vram_usage_mode"),
RENDERER_SHADER_BACKEND("shader_backend"),
RENDERER_NVDEC_EMULATION("nvdec_emulation"),
RENDERER_ASTC_DECODE_METHOD("accelerate_astc"),
RENDERER_ASTC_RECOMPRESSION("astc_recompression"),
RENDERER_ACCURACY("gpu_accuracy"),
RENDERER_RESOLUTION("resolution_setup"),
RENDERER_VSYNC("use_vsync"),

View file

@ -23,7 +23,8 @@ object Settings {
SECTION_INPUT_PLAYER_SEVEN,
SECTION_INPUT_PLAYER_EIGHT,
SECTION_THEME(R.string.preferences_theme),
SECTION_DEBUG(R.string.preferences_debug);
SECTION_DEBUG(R.string.preferences_debug),
SECTION_EDEN_VEIL(R.string.eden_veil);
}
fun getPlayerString(player: Int): String =

View file

@ -289,6 +289,46 @@ abstract class SettingsItem(
valuesId = R.array.rendererAccuracyValues
)
)
put(
SingleChoiceSetting(
IntSetting.RENDERER_SHADER_BACKEND,
titleId = R.string.shader_backend,
choicesId = R.array.rendererShaderNames,
valuesId = R.array.rendererShaderValues
)
)
put(
SingleChoiceSetting(
IntSetting.RENDERER_NVDEC_EMULATION,
titleId = R.string.nvdec_emulation,
choicesId = R.array.rendererNvdecNames,
valuesId = R.array.rendererNvdecValues
)
)
put(
SingleChoiceSetting(
IntSetting.RENDERER_ASTC_DECODE_METHOD,
titleId = R.string.accelerate_astc,
choicesId = R.array.astcDecodingMethodNames,
valuesId = R.array.astcDecodingMethodValues
)
)
put(
SingleChoiceSetting(
IntSetting.RENDERER_ASTC_RECOMPRESSION,
titleId = R.string.astc_recompression,
choicesId = R.array.astcRecompressionMethodNames,
valuesId = R.array.astcRecompressionMethodValues
)
)
put(
SingleChoiceSetting(
IntSetting.RENDERER_VRAM_USAGE_MODE,
titleId = R.string.vram_usage_mode,
choicesId = R.array.vramUsageMethodNames,
valuesId = R.array.vramUsageMethodValues
)
)
put(
SingleChoiceSetting(
IntSetting.RENDERER_RESOLUTION,

View file

@ -100,6 +100,7 @@ class SettingsFragmentPresenter(
MenuTag.SECTION_INPUT_PLAYER_EIGHT -> addInputPlayer(sl, 7)
MenuTag.SECTION_THEME -> addThemeSettings(sl)
MenuTag.SECTION_DEBUG -> addDebugSettings(sl)
MenuTag.SECTION_EDEN_VEIL -> addEdenVeilSettings(sl)
}
settingsList = sl
adapter.submitList(settingsList) {
@ -143,6 +144,14 @@ class SettingsFragmentPresenter(
menuKey = MenuTag.SECTION_DEBUG
)
)
add(
SubmenuSetting(
titleId = R.string.eden_veil,
descriptionId = R.string.eden_veil_description,
iconId = R.drawable.ic_eden_veil,
menuKey = MenuTag.SECTION_EDEN_VEIL
)
)
add(
RunnableSetting(
titleId = R.string.reset_to_default,
@ -154,12 +163,92 @@ class SettingsFragmentPresenter(
}
}
private val InterpolationSetting = object : AbstractBooleanSetting {
override val key = BooleanSetting.FRAME_INTERPOLATION.key
override fun getBoolean(needsGlobal: Boolean): Boolean {
return BooleanSetting.FRAME_INTERPOLATION.getBoolean(needsGlobal)
}
override fun setBoolean(value: Boolean) {
BooleanSetting.FRAME_INTERPOLATION.setBoolean(value)
}
override val defaultValue = BooleanSetting.FRAME_INTERPOLATION.defaultValue
override fun getValueAsString(needsGlobal: Boolean): String =
BooleanSetting.FRAME_INTERPOLATION.getValueAsString(needsGlobal)
override fun reset() = BooleanSetting.FRAME_INTERPOLATION.reset()
}
private val syncCoreSpeedSetting = object : AbstractBooleanSetting {
override val key = BooleanSetting.CORE_SYNC_CORE_SPEED.key
override fun getBoolean(needsGlobal: Boolean): Boolean {
return BooleanSetting.CORE_SYNC_CORE_SPEED.getBoolean(needsGlobal)
}
override fun setBoolean(value: Boolean) {
BooleanSetting.CORE_SYNC_CORE_SPEED.setBoolean(value)
}
override val defaultValue = BooleanSetting.CORE_SYNC_CORE_SPEED.defaultValue
override fun getValueAsString(needsGlobal: Boolean): String =
BooleanSetting.CORE_SYNC_CORE_SPEED.getValueAsString(needsGlobal)
override fun reset() = BooleanSetting.CORE_SYNC_CORE_SPEED.reset()
}
private val frameSkippingSetting = object : AbstractBooleanSetting {
override val key = BooleanSetting.FRAME_SKIPPING.key
override fun getBoolean(needsGlobal: Boolean): Boolean {
return BooleanSetting.FRAME_SKIPPING.getBoolean(needsGlobal)
}
override fun setBoolean(value: Boolean) {
BooleanSetting.FRAME_SKIPPING.setBoolean(value)
}
override val defaultValue = BooleanSetting.FRAME_SKIPPING.defaultValue
override fun getValueAsString(needsGlobal: Boolean): String =
BooleanSetting.FRAME_SKIPPING.getValueAsString(needsGlobal)
override fun reset() = BooleanSetting.FRAME_SKIPPING.reset()
}
private fun addEdenVeilSubmenu(sl: ArrayList<SettingsItem>) {
sl.apply {
add(
SubmenuSetting(
titleId = R.string.eden_veil,
descriptionId = R.string.eden_veil_description,
iconId = R.drawable.ic_code,
menuKey = MenuTag.SECTION_EDEN_VEIL
)
)
addEdenVeilSettings(sl)
add(BooleanSetting.FRAME_INTERPOLATION.key)
add(BooleanSetting.FRAME_SKIPPING.key)
add(BooleanSetting.CORE_SYNC_CORE_SPEED.key)
add(IntSetting.RENDERER_SHADER_BACKEND.key)
add(IntSetting.RENDERER_OPTIMIZE_SPIRV_OUTPUT.key)
add(IntSetting.RENDERER_NVDEC_EMULATION.key)
add(IntSetting.RENDERER_ASTC_DECODE_METHOD.key)
add(IntSetting.RENDERER_ASTC_RECOMPRESSION.key)
add(IntSetting.RENDERER_VRAM_USAGE_MODE.key)
}
}
private fun addSystemSettings(sl: ArrayList<SettingsItem>) {
sl.apply {
add(StringSetting.DEVICE_NAME.key)
add(BooleanSetting.RENDERER_USE_SPEED_LIMIT.key)
add(ShortSetting.RENDERER_SPEED_LIMIT.key)
add(BooleanSetting.CORE_SYNC_CORE_SPEED.key)
add(BooleanSetting.USE_DOCKED_MODE.key)
add(IntSetting.REGION_INDEX.key)
add(IntSetting.LANGUAGE_INDEX.key)
@ -170,8 +259,6 @@ class SettingsFragmentPresenter(
private fun addGraphicsSettings(sl: ArrayList<SettingsItem>) {
sl.apply {
add(BooleanSetting.FRAME_INTERPOLATION.key)
add(BooleanSetting.FRAME_SKIPPING.key)
add(IntSetting.RENDERER_ACCURACY.key)
add(IntSetting.RENDERER_RESOLUTION.key)
add(IntSetting.RENDERER_VSYNC.key)
@ -182,7 +269,6 @@ class SettingsFragmentPresenter(
add(IntSetting.RENDERER_SCREEN_LAYOUT.key)
add(IntSetting.RENDERER_ASPECT_RATIO.key)
add(IntSetting.VERTICAL_ALIGNMENT.key)
add(IntSetting.RENDERER_OPTIMIZE_SPIRV_OUTPUT.key)
add(BooleanSetting.PICTURE_IN_PICTURE.key)
add(BooleanSetting.RENDERER_USE_DISK_SHADER_CACHE.key)
add(BooleanSetting.RENDERER_FORCE_MAX_CLOCK.key)
@ -342,7 +428,79 @@ class SettingsFragmentPresenter(
override val isSaveable = true
}
}
private fun addEdenVeilSettings(sl: ArrayList<SettingsItem>) {
sl.apply {
add(
SwitchSetting(
InterpolationSetting, // The interpolation setting object you've created
titleId = R.string.frame_interpolation, // Use appropriate string resources for the title
descriptionId = R.string.frame_interpolation_description // Description resource for the interpolation setting
)
)
add(
SwitchSetting(
frameSkippingSetting,
titleId = R.string.frame_skipping,
descriptionId = R.string.frame_skipping_description
)
)
add(
SwitchSetting(
syncCoreSpeedSetting,
titleId = R.string.use_sync_core,
descriptionId = R.string.use_sync_core_description
)
)
add(
SingleChoiceSetting(
IntSetting.RENDERER_SHADER_BACKEND,
titleId = R.string.shader_backend,
choicesId = R.array.rendererShaderNames,
valuesId = R.array.rendererShaderValues
)
)
add(
SingleChoiceSetting(
IntSetting.RENDERER_NVDEC_EMULATION,
titleId = R.string.nvdec_emulation,
choicesId = R.array.rendererNvdecNames,
valuesId = R.array.rendererNvdecValues
)
)
add(
SingleChoiceSetting(
IntSetting.RENDERER_ASTC_DECODE_METHOD,
titleId = R.string.accelerate_astc,
choicesId = R.array.astcDecodingMethodNames,
valuesId = R.array.astcDecodingMethodValues
)
)
add(
SingleChoiceSetting(
IntSetting.RENDERER_ASTC_RECOMPRESSION,
titleId = R.string.astc_recompression,
choicesId = R.array.astcRecompressionMethodNames,
valuesId = R.array.astcRecompressionMethodValues
)
)
add(
SingleChoiceSetting(
IntSetting.RENDERER_VRAM_USAGE_MODE,
titleId = R.string.vram_usage_mode,
choicesId = R.array.vramUsageMethodNames,
valuesId = R.array.vramUsageMethodValues
)
)
add(
SingleChoiceSetting(
IntSetting.RENDERER_OPTIMIZE_SPIRV_OUTPUT,
titleId = R.string.renderer_optimize_spirv_output,
choicesId = R.array.optimizeSpirvOutputEntries,
valuesId = R.array.optimizeSpirvOutputValues
)
)
}
}
private fun addInputPlayer(sl: ArrayList<SettingsItem>, playerIndex: Int) {
sl.apply {
val connectedSetting = object : AbstractBooleanSetting {

View file

@ -0,0 +1,85 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<group
android:scaleX="0.1"
android:scaleY="-0.1"
android:translateY="960">
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M3006,9500 c-276,-35 -669,-178 -886,-322 -102,-68 -96,-75 91,-114
335,-68 658,-178 1036,-350 90,-41 165,-74 168,-74 3,0 62,25 132,54 71,30
166,66 213,79 102,30 200,44 200,29 0,-6 -7,-45 -15,-87 -9,-50 -11,-83 -5
-94 5,-9 124,-131 266,-271 141,-140 273,-275 294,-300 l38,-45 -112,8 c-165
12 -727,1 -881,-18 -222,-27 -322,-46 -489,-97 -247,-75 -491,-218 -801,-473
-174,-143 -492,-484 -553,-593 -22,-40 -22,-41 -4,-51 16,-8 40,0 124,44 230
120,818,340,1127,420 316,83,691,146,951,160 l125,7 -70,-65 c-146,-135 -328
-353 -464,-557 -277,-415 -526,-1018 -602,-1460 -30,-171 -8,-451 38,-502 40
-44,69,-6,124,160 97,295,229,598,339,777 207,339,558,745,799,924 143,106
352,222,500,278 l64,24 -7,-23 c-3,-13 -13,-52 -21,-88 -8,-36 -30,-129 -48
-207 l-34,-143 212,0 212,0 38,153 c21,83 49,187 62,230 l24,77 72,-49 c157
-106,270,-202,452,-385 407,-408,671,-778,943,-1321 39,-77 74,-152 77,-167
26,-104,113,113,137,338 9,89,9,149,0,267 -34,427 -135,757 -320,1042 -62,95
-247,278 -352,347 -141,93 -398,214 -588,278 l-113,38 48,11 c246,55,405,67
681,52 620,-35,1063,-138,1615,-376 105,-45,127,-39,82,22 -118,156 -331,374
-470,479 -325,247 -572,353 -985,425 -165,29 -465,32 -579,6 -114,-27 -246
-73 -359,-127 l-103,-49 22,37 c100,165,255,346,515,602 277,273,518,462,815
641,179,107,178,126 -6,128 -238,3 -576,-84 -872,-224 -331,-157 -698,-421
-880,-634 -35,-42 -68,-76 -73,-76 -4,0 -54,61 -110,135 -449,594 -924,958
-1375,1055 -84,18 -362,27 -459,15z"/>
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M4613,6403 c-4,-16 -30,-129 -58,-253 l-52,-225 220,-3 c121,-1 222
0,225,3 3,2 20,87 38,187 18,101 38,207 43,237 6,29 11,60 11,67 0,11 -39,14
-210,14 l-210,0 -7,-27z"/>
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M4472,5773 c-6,-32 -32,-157 -57,-277 -25,-121 -45,-228 -45,-238 0
-17,15,-18,239,-18 l239,0 5,33 c22,151,59,393,67,442 5,33,10,72,10,88 l0,27
-224,0 -224,0 -10,-57z"/>
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M4346,5128 c-22,-102 -76,-441 -76,-477 0,-8 76,-11 264,-11 l264,0
7,98 c12,186,26,347,31,380 l6,32 -246,0 -246,0 -4,-22z"/>
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M4256,4528 c-4,-12 -20,-182 -46,-471 -6,-65 -8,-122 -5,-128 10,-15
565,-12 569,4 3,6 7,146 10,310 l7,297 -266,0 c-204,0 -267,-3 -269,-12z"/>
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M4196,3798 c-4,-31 -26,-512 -26,-570 l0,-28 330,0 331,0 -5,33 c-6
35,-22,228,-36,452 -5,77,-10,141,-10,143 0,1 -130,2 -290,2 l-289,0 -5,-32z"/>
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M4170,2845 l0,-265 365,0 c353,0,365,1,365,19 0,21 -25,219 -40,321
-5,36,-13,93,-16,128 l-7,62 -333,0 -334,0 0,-265z"/>
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M4180,2473 c1,-59 42,-436 57,-520 l5,-33 390,0 c366,0,389,1,384,18
-2,9,-12,55,-20,102 -9,47,-20,108,-26,135 -5,28,-16,93,-25,145 -8,52,-18
110,-21,128 l-5,32 -369,0 c-204,0,-370,-3,-370,-7z"/>
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M4260,1806 c0,-43 87,-485 121,-613 l12,-43 413,0 c229,0,414,4,414
9 0,5,-15,60,-34,122 -35,114,-108,377,-120,434 -4,17,-12,47,-17,68 l-10,37
-389,0 c-323,0,-390,-2,-390,-14z"/>
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M4420,1037 c0,-56 211,-761 297,-994 l16,-43 493,0 c272,0,494,1,494
3 0,2,-28,53,-61,113 -140,250,-260,520,-356,802 l-45,132 -419,0 c-339,0
-419,-2,-419,-13z"/>
</group>
</vector>

View file

@ -85,6 +85,72 @@
<item>2</item>
</integer-array>
<string-array name="rendererShaderNames">
<item>@string/shader_backend_glsl</item>
<item>@string/shader_backend_glasm</item>
<item>@string/shader_backend_spirv</item>
</string-array>
<integer-array name="rendererShaderValues">
<item>0</item>
<item>1</item>
<item>2</item>
</integer-array>
<!-- VRAM USAGE MODE CHOICES -->
<string-array name="vramUsageMethodNames">
<item>@string/vram_usage_conservative</item>
<item>@string/vram_usage_aggressive</item>
</string-array>
<!-- VRAM USAGE MODE VALUES -->
<integer-array name="vramUsageMethodValues">
<item>0</item> <!-- Conservative -->
<item>1</item> <!-- Aggressive -->
</integer-array>
<!-- ASTC Decoding Method Choices -->
<string-array name="astcDecodingMethodNames">
<item>@string/accelerate_astc_cpu</item>
<item>@string/accelerate_astc_gpu</item>
<item>@string/accelerate_astc_async</item>
</string-array>
<!-- ASTC Decoding Method Values -->
<integer-array name="astcDecodingMethodValues">
<item>0</item> <!-- CPU -->
<item>1</item> <!-- GPU -->
<item>2</item> <!-- CPU Asynchronously -->
</integer-array>
<!-- ASTC Recompression Method Choices -->
<string-array name="astcRecompressionMethodNames">
<item>@string/astc_recompression_uncompressed</item>
<item>@string/astc_recompression_bc1</item>
<item>@string/astc_recompression_bc3</item>
</string-array>
<!-- ASTC Recompression Method Values -->
<integer-array name="astcRecompressionMethodValues">
<item>0</item> <!-- Uncompressed -->
<item>1</item> <!-- BC1 -->
<item>2</item> <!-- BC3 -->
</integer-array>
<!-- NVDEC Emulation Choices -->
<string-array name="rendererNvdecNames">
<item>@string/nvdec_emulation_none</item> <!-- Off -->
<item>@string/nvdec_emulation_cpu</item> <!-- Cpu -->
<item>@string/nvdec_emulation_gpu</item> <!-- Gpu -->
</string-array>
<!-- NVDEC Emulation Values -->
<integer-array name="rendererNvdecValues">
<item>3</item> <!-- Off value -->
<item>1</item> <!-- CPU value -->
<item>2</item> <!-- GPU value -->
</integer-array>
<string-array name="rendererResolutionNames">
<item>@string/resolution_half</item>
<item>@string/resolution_three_quarter</item>

View file

@ -258,6 +258,9 @@
<string name="use_disk_shader_cache_description">Reduces stuttering by locally storing and loading generated shaders.</string>
<string name="anisotropic_filtering">Anisotropic filtering</string>
<string name="anisotropic_filtering_description">Improves the quality of textures when viewed at oblique angles</string>
<string name="nvdec_emulation">NVDEC Emulation</string>
<string name="nvdec_emulation_description">Specifies how videos should be decoded. It can either use the CPU or the GPU for decoding, or perform no decoding at all (black screen on videos). In most cases, GPU decoding provides the best performance.</string>
<string name="shader_backend">Shader Backend</string>
<!-- Debug settings strings -->
<string name="cpu">CPU</string>
@ -361,6 +364,8 @@
<string name="reset_mapping_description">Are you sure that you want to reset all mappings for this controller to default? This cannot be undone.</string>
<!-- Miscellaneous -->
<string name="eden_veil">Edens Veil</string>
<string name="eden_veil_description">Beyond default</string>
<string name="slider_default">Default</string>
<string name="ini_saved">Saved settings</string>
<string name="gameid_saved">Saved settings for %1$s</string>
@ -571,11 +576,44 @@
<string name="renderer_vulkan">Vulkan</string>
<string name="renderer_none">None</string>
<!-- Shader Backend -->
<string name="shader_backend_glsl">GLSL</string>
<string name="shader_backend_glasm">GLASM</string>
<string name="shader_backend_spirv">SPIR-V</string>
<!-- NVDEC Emulation -->
<string name="nvdec_emulation_cpu">CPU</string>
<string name="nvdec_emulation_gpu">GPU</string>
<string name="nvdec_emulation_none">None</string>
<!-- Renderer Accuracy -->
<string name="renderer_accuracy_normal">Normal</string>
<string name="renderer_accuracy_high">High</string>
<string name="renderer_accuracy_extreme">Extreme (Slow)</string>
<!-- ASTC Decoding Method -->
<string name="accelerate_astc">ASTC Decoding Method</string>
<string name="accelerate_astc_description">Choose ASTC decoding method: CPU (slow but safe), GPU (fast, recommended), or Async CPU (no stutter but may glitch).</string>
<!-- ASTC Decoding Method Choices -->
<string name="accelerate_astc_cpu">CPU</string>
<string name="accelerate_astc_gpu">GPU</string>
<string name="accelerate_astc_async">CPU Asynchronously</string>
<!-- ASTC Recompression Method -->
<string name="astc_recompression">ASTC Recompression Method</string>
<string name="astc_recompression_description">Low-end Android GPUs often lack ASTC support, forcing emulators to decompress textures to RGBA8. This option recompresses RGBA8 to BC1/BC3, saving VRAM but reducing quality.</string>
<!-- ASTC Recompression Method Choices -->
<string name="astc_recompression_uncompressed">Uncompressed</string>
<string name="astc_recompression_bc1">BC1 (Low Quality)</string>
<string name="astc_recompression_bc3">BC3 (Medium Quality)</string>
<!-- ASTC Recompression Method Choices -->
<string name="vram_usage_mode">VRAM Usage Mode</string>
<string name="vram_usage_conservative">Conservative</string>
<string name="vram_usage_aggressive">Aggressive</string>
<!-- Resolutions -->
<string name="resolution_half">0.5X (360p/540p)</string>
<string name="resolution_three_quarter">0.75X (540p/810p)</string>