From b1bedc6a8ba2a7da694c6a313a9925f10474d41f Mon Sep 17 00:00:00 2001 From: BreadFish64 Date: Sat, 4 Apr 2020 16:59:36 -0500 Subject: [PATCH] android: add texture filter setting --- .../main/java/org/citra/citra_emu/NativeLibrary.java | 2 ++ .../settings/ui/SettingsFragmentPresenter.java | 8 +++++++- .../features/settings/utils/SettingsFile.java | 1 + src/android/app/src/main/jni/config.cpp | 2 ++ src/android/app/src/main/jni/native.cpp | 12 ++++++++++++ src/android/app/src/main/jni/native.h | 3 +++ src/android/app/src/main/res/values/strings.xml | 2 ++ 7 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.java b/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.java index 0f0f1e47c..275d56bf1 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.java @@ -217,6 +217,8 @@ public final class NativeLibrary { */ public static native void Run(String path); + public static native String[] GetTextureFilterNames(); + /** * Begins emulation from the specified savestate. */ diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.java b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.java index 0253b35bb..8e29547e9 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.java @@ -2,6 +2,7 @@ package org.citra.citra_emu.features.settings.ui; import android.text.TextUtils; +import org.citra.citra_emu.NativeLibrary; import org.citra.citra_emu.R; import org.citra.citra_emu.features.settings.model.Setting; import org.citra.citra_emu.features.settings.model.SettingSection; @@ -13,6 +14,7 @@ import org.citra.citra_emu.features.settings.model.view.InputBindingSetting; import org.citra.citra_emu.features.settings.model.view.SettingsItem; import org.citra.citra_emu.features.settings.model.view.SingleChoiceSetting; import org.citra.citra_emu.features.settings.model.view.SliderSetting; +import org.citra.citra_emu.features.settings.model.view.StringSingleChoiceSetting; import org.citra.citra_emu.features.settings.model.view.SubmenuSetting; import org.citra.citra_emu.features.settings.utils.SettingsFile; @@ -212,6 +214,9 @@ public final class SettingsFragmentPresenter { Setting resolutionFactor = rendererSection.getSetting(SettingsFile.KEY_RESOLUTION_FACTOR); Setting vsyncEnable = rendererSection.getSetting(SettingsFile.KEY_USE_VSYNC); Setting filterMode = rendererSection.getSetting(SettingsFile.KEY_FILTER_MODE); + Setting textureFilterName = rendererSection.getSetting(SettingsFile.KEY_TEXTURE_FILTER_NAME); + + String[] textureFilterNames = NativeLibrary.GetTextureFilterNames(); sl.add(new CheckBoxSetting(SettingsFile.KEY_HW_RENDERER, Settings.SECTION_RENDERER, R.string.hw_renderer, R.string.hw_renderer_description, true, hardwareRenderer, true, mView)); sl.add(new CheckBoxSetting(SettingsFile.KEY_HW_SHADER, Settings.SECTION_RENDERER, R.string.hw_shaders, R.string.hw_shaders_description, true, hardwareShader, true, mView)); @@ -219,6 +224,7 @@ public final class SettingsFragmentPresenter { sl.add(new SliderSetting(SettingsFile.KEY_RESOLUTION_FACTOR, Settings.SECTION_RENDERER, R.string.internal_resolution, R.string.internal_resolution_description, 1, 4, "x", 1, resolutionFactor)); sl.add(new CheckBoxSetting(SettingsFile.KEY_USE_VSYNC, Settings.SECTION_RENDERER, R.string.vsync, R.string.vsync_description, true, vsyncEnable)); sl.add(new CheckBoxSetting(SettingsFile.KEY_FILTER_MODE, Settings.SECTION_RENDERER, R.string.linear_filtering, R.string.linear_filtering_description, true, filterMode)); + sl.add(new StringSingleChoiceSetting(SettingsFile.KEY_TEXTURE_FILTER_NAME, Settings.SECTION_RENDERER, R.string.texture_filter_name, R.string.texture_filter_description, textureFilterNames, textureFilterNames,"none", textureFilterName)); } private void addAudioSettings(ArrayList sl) { @@ -229,4 +235,4 @@ public final class SettingsFragmentPresenter { sl.add(new CheckBoxSetting(SettingsFile.KEY_ENABLE_AUDIO_STRETCHING, Settings.SECTION_AUDIO, R.string.audio_stretch, R.string.audio_stretch_description, false, audioStretch)); } -} \ No newline at end of file +} diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/utils/SettingsFile.java b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/utils/SettingsFile.java index ae88246fc..f896bc250 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/utils/SettingsFile.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/utils/SettingsFile.java @@ -46,6 +46,7 @@ public final class SettingsFile { public static final String KEY_BACKGROUND_GREEN = "bg_green"; public static final String KEY_FACTOR_3D = "factor_3d"; public static final String KEY_FILTER_MODE = "filter_mode"; + public static final String KEY_TEXTURE_FILTER_NAME = "texture_filter_name"; public static final String KEY_LAYOUT_OPTION = "layout_option"; public static final String KEY_SWAP_SCREEN = "swap_screen"; diff --git a/src/android/app/src/main/jni/config.cpp b/src/android/app/src/main/jni/config.cpp index 8661b6841..65390171d 100644 --- a/src/android/app/src/main/jni/config.cpp +++ b/src/android/app/src/main/jni/config.cpp @@ -116,6 +116,8 @@ void Config::ReadValues() { Settings::values.use_frame_limit = sdl2_config->GetBoolean("Renderer", "use_frame_limit", true); Settings::values.frame_limit = static_cast(sdl2_config->GetReal("Renderer", "frame_limit", 1.0) * 100.0); + Settings::values.texture_filter_name = + sdl2_config->GetString("Renderer", "texture_filter_name", "none"); Settings::values.render_3d = static_cast( sdl2_config->GetInteger("Renderer", "render_3d", 0)); diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index e8aceec2c..94aed6d46 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -28,6 +28,7 @@ #include "jni/native.h" #include "jni/ndk_motion.h" #include "video_core/renderer_base.h" +#include "video_core/renderer_opengl/texture_filters/texture_filterer.h" namespace { @@ -492,4 +493,15 @@ void Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2(JNIEnv* en } } +jobjectArray Java_org_citra_citra_1emu_NativeLibrary_GetTextureFilterNames(JNIEnv* env, + jclass clazz) { + auto names = OpenGL::TextureFilterer::GetFilterNames(); + jobjectArray ret = (jobjectArray)env->NewObjectArray(static_cast(names.size()), + env->FindClass("java/lang/String"), + env->NewStringUTF("")); + for (jsize i = 0; i < names.size(); ++i) + env->SetObjectArrayElement(ret, i, env->NewStringUTF(names[i].data())); + return ret; +} + } // extern "C" diff --git a/src/android/app/src/main/jni/native.h b/src/android/app/src/main/jni/native.h index 5ab9552cd..103f4e9fb 100644 --- a/src/android/app/src/main/jni/native.h +++ b/src/android/app/src/main/jni/native.h @@ -171,6 +171,9 @@ JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetUserSetting JNIEXPORT jdoubleArray JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetPerfStats(JNIEnv* env, jclass clazz); +JNIEXPORT jobjectArray JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetTextureFilterNames( + JNIEnv* env, jclass clazz); + #ifdef __cplusplus } #endif diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 584b81a65..834fe1b20 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -53,6 +53,8 @@ Synchronizes the game frame rate to the refresh rate of your device. Enable linear filtering Enables linear filtering, which causes game visuals to appear smoother. + Texture Filter + Applies a filter to textures. Enable hardware renderer Uses hardware to emulate 3DS graphics. When enabled, game performance will be significantly improved. Enable hardware shader