From d2e55558dfe2b04eab5073b54e932c34bd1e9064 Mon Sep 17 00:00:00 2001
From: bunnei <bunneidev@gmail.com>
Date: Sun, 16 Apr 2023 01:05:28 -0700
Subject: [PATCH] android: settings: Add scaling filter & anti-aliasing
 options. (#66)

---
 .../settings/ui/SettingsFragmentPresenter.kt  | 28 +++++++++++++++++
 .../features/settings/utils/SettingsFile.kt   |  2 ++
 .../app/src/main/res/values/arrays.xml        | 30 +++++++++++++++++++
 .../app/src/main/res/values/strings.xml       | 15 ++++++++++
 4 files changed, 75 insertions(+)

diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
index a137d1c3a..aeb262ce6 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
@@ -194,6 +194,10 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
         val rendererBackend = rendererSection!!.getSetting(SettingsFile.KEY_RENDERER_BACKEND)
         val rendererAccuracy = rendererSection.getSetting(SettingsFile.KEY_RENDERER_ACCURACY)
         val rendererResolution = rendererSection.getSetting(SettingsFile.KEY_RENDERER_RESOLUTION)
+        val rendererScalingFilter =
+            rendererSection.getSetting(SettingsFile.KEY_RENDERER_SCALING_FILTER)
+        val rendererAntiAliasing =
+            rendererSection.getSetting(SettingsFile.KEY_RENDERER_ANTI_ALIASING)
         val rendererAspectRatio =
             rendererSection.getSetting(SettingsFile.KEY_RENDERER_ASPECT_RATIO)
         val rendererUseDiskShaderCache =
@@ -240,6 +244,30 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
                     2
                 )
             )
+            add(
+                SingleChoiceSetting(
+                    SettingsFile.KEY_RENDERER_SCALING_FILTER,
+                    Settings.SECTION_RENDERER,
+                    rendererScalingFilter,
+                    R.string.renderer_scaling_filter,
+                    0,
+                    R.array.rendererScalingFilterNames,
+                    R.array.rendererScalingFilterValues,
+                    1
+                )
+            )
+            add(
+                SingleChoiceSetting(
+                    SettingsFile.KEY_RENDERER_ANTI_ALIASING,
+                    Settings.SECTION_RENDERER,
+                    rendererAntiAliasing,
+                    R.string.renderer_anti_aliasing,
+                    0,
+                    R.array.rendererAntiAliasingNames,
+                    R.array.rendererAntiAliasingValues,
+                    0
+                )
+            )
             add(
                 SingleChoiceSetting(
                     SettingsFile.KEY_RENDERER_ASPECT_RATIO,
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.kt
index c518d9ba0..493d90954 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.kt
@@ -34,6 +34,8 @@ object SettingsFile {
 
     // Renderer
     const val KEY_RENDERER_RESOLUTION = "resolution_setup"
+    const val KEY_RENDERER_SCALING_FILTER = "scaling_filter"
+    const val KEY_RENDERER_ANTI_ALIASING = "anti_aliasing"
     const val KEY_RENDERER_ASPECT_RATIO = "aspect_ratio"
     const val KEY_RENDERER_ACCURACY = "gpu_accuracy"
     const val KEY_RENDERER_USE_DISK_SHADER_CACHE = "use_disk_shader_cache"
diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml
index 6d909ddae..628d43197 100644
--- a/src/android/app/src/main/res/values/arrays.xml
+++ b/src/android/app/src/main/res/values/arrays.xml
@@ -121,6 +121,36 @@
         <item>4</item>
     </integer-array>
 
+    <string-array name="rendererScalingFilterNames">
+        <item>@string/scaling_filter_nearest_neighbor</item>
+        <item>@string/scaling_filter_bilinear</item>
+        <item>@string/scaling_filter_bicubic</item>
+        <item>@string/scaling_filter_gaussian</item>
+        <item>@string/scaling_filter_scale_force</item>
+        <item>@string/scaling_filter_fsr</item>
+    </string-array>
+
+    <integer-array name="rendererScalingFilterValues">
+        <item>0</item>
+        <item>1</item>
+        <item>2</item>
+        <item>3</item>
+        <item>4</item>
+        <item>5</item>
+    </integer-array>
+
+    <string-array name="rendererAntiAliasingNames">
+        <item>@string/anti_aliasing_none</item>
+        <item>@string/anti_aliasing_fxaa</item>
+        <item>@string/anti_aliasing_smaa</item>
+    </string-array>
+
+    <integer-array name="rendererAntiAliasingValues">
+        <item>0</item>
+        <item>1</item>
+        <item>2</item>
+    </integer-array>
+
     <string-array name="cpuAccuracyNames">
         <item>@string/cpu_accuracy_auto</item>
         <item>@string/cpu_accuracy_accurate</item>
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 45a9694d4..75d1f2293 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -29,6 +29,8 @@
     <string name="renderer_accuracy">Accuracy level</string>
     <string name="renderer_resolution">Resolution</string>
     <string name="renderer_aspect_ratio">Aspect Ratio</string>
+    <string name="renderer_scaling_filter">Window Adapting Filter</string>
+    <string name="renderer_anti_aliasing">Anti-Aliasing Method</string>
     <string name="renderer_force_max_clock">Force maximum clocks (Adreno only)</string>
     <string name="renderer_force_max_clock_description">Forces the GPU to run at the maximum possible clocks (thermal constraints will still be applied).</string>
     <string name="renderer_asynchronous_shaders">Use asynchronous shaders</string>
@@ -166,6 +168,19 @@
     <string name="resolution_three">3X (2160p/3240p) (Slow)</string>
     <string name="resolution_four">4X (2880p/4320p) (Slow)</string>
 
+    <!-- Scaling Filters -->
+    <string name="scaling_filter_nearest_neighbor">Nearest Neighbor</string>
+    <string name="scaling_filter_bilinear">Bilinear</string>
+    <string name="scaling_filter_bicubic">Bicubic</string>
+    <string name="scaling_filter_gaussian">Gaussian</string>
+    <string name="scaling_filter_scale_force">ScaleForce</string>
+    <string name="scaling_filter_fsr">AMD FidelityFX™ Super Resolution</string>
+
+    <!-- Anti-Aliasing -->
+    <string name="anti_aliasing_none">None</string>
+    <string name="anti_aliasing_fxaa">FXAA</string>
+    <string name="anti_aliasing_smaa">SMAA</string>
+
     <!-- Aspect Ratios -->
     <string name="ratio_default">Default (16:9)</string>
     <string name="ratio_force_four_three">Force 4:3</string>