summaryrefslogtreecommitdiff
path: root/Source/Android/jni/MainAndroid.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2019-01-22 22:45:02 +1000
committerStenzek <stenzek@gmail.com>2019-01-25 11:15:57 +1000
commitc6f151c4e10d08108316ae235f8463e88364d2e1 (patch)
tree6bf372364d5e4495312e19751babcf0bf1da148a /Source/Android/jni/MainAndroid.cpp
parent82fd923a4e33451dd30fcb6a612c8b5db0034f75 (diff)
Android: Use scaledDensity as backbuffer scale (for imgui)
Diffstat (limited to 'Source/Android/jni/MainAndroid.cpp')
-rw-r--r--Source/Android/jni/MainAndroid.cpp53
1 files changed, 50 insertions, 3 deletions
diff --git a/Source/Android/jni/MainAndroid.cpp b/Source/Android/jni/MainAndroid.cpp
index 441080e57a..9ffa7d2b0d 100644
--- a/Source/Android/jni/MainAndroid.cpp
+++ b/Source/Android/jni/MainAndroid.cpp
@@ -52,6 +52,7 @@
#include "VideoCommon/RenderBase.h"
#include "VideoCommon/VideoBackendBase.h"
+#include "../../Core/Common/WindowSystemInfo.h"
#include "jni/AndroidCommon/AndroidCommon.h"
#include "jni/AndroidCommon/IDCache.h"
#include "jni/ButtonManager.h"
@@ -589,7 +590,52 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_ReloadWiimot
Wiimote::LoadConfig();
}
-static void Run(const std::vector<std::string>& paths, bool first_open,
+// Returns the scale factor for imgui rendering.
+// Based on the scaledDensity of the device's display metrics.
+static float GetRenderSurfaceScale(JNIEnv* env)
+{
+ // NativeLibrary emulation_activity = NativeLibrary.getEmulationActivity();
+ jclass native_library_class = env->FindClass("org/dolphinemu/dolphinemu/NativeLibrary");
+ jmethodID get_emulation_activity_method =
+ env->GetStaticMethodID(native_library_class, "getEmulationActivity",
+ "()Lorg/dolphinemu/dolphinemu/activities/EmulationActivity;");
+ jobject emulation_activity =
+ env->CallStaticObjectMethod(native_library_class, get_emulation_activity_method);
+
+ // WindowManager window_manager = emulation_activity.getWindowManager();
+ jmethodID get_window_manager_method =
+ env->GetMethodID(env->GetObjectClass(emulation_activity), "getWindowManager",
+ "()Landroid/view/WindowManager;");
+ jobject window_manager = env->CallObjectMethod(emulation_activity, get_window_manager_method);
+
+ // Display display = window_manager.getDisplay();
+ jmethodID get_display_method = env->GetMethodID(env->GetObjectClass(window_manager),
+ "getDefaultDisplay", "()Landroid/view/Display;");
+ jobject display = env->CallObjectMethod(window_manager, get_display_method);
+
+ // DisplayMetrics metrics = new DisplayMetrics();
+ jclass display_metrics_class = env->FindClass("android/util/DisplayMetrics");
+ jmethodID display_metrics_constructor = env->GetMethodID(display_metrics_class, "<init>", "()V");
+ jobject metrics = env->NewObject(display_metrics_class, display_metrics_constructor);
+
+ // display.getMetrics(metrics);
+ jmethodID get_metrics_method = env->GetMethodID(env->GetObjectClass(display), "getMetrics",
+ "(Landroid/util/DisplayMetrics;)V");
+ env->CallVoidMethod(display, get_metrics_method, metrics);
+
+ // float scaled_density = metrics.scaledDensity;
+ jfieldID scaled_density_field =
+ env->GetFieldID(env->GetObjectClass(metrics), "scaledDensity", "F");
+ float scaled_density = env->GetFloatField(metrics, scaled_density_field);
+ __android_log_print(ANDROID_LOG_INFO, DOLPHIN_TAG, "Using %f for render surface scale.",
+ scaled_density);
+
+ // cleanup
+ env->DeleteLocalRef(metrics);
+ return scaled_density;
+}
+
+static void Run(JNIEnv* env, const std::vector<std::string>& paths, bool first_open,
std::optional<std::string> savestate_path = {}, bool delete_savestate = false)
{
ASSERT(!paths.empty());
@@ -614,6 +660,7 @@ static void Run(const std::vector<std::string>& paths, bool first_open,
std::unique_ptr<BootParameters> boot = BootParameters::GenerateFromFile(paths, savestate_path);
boot->delete_savestate = delete_savestate;
WindowSystemInfo wsi(WindowSystemType::Android, nullptr, s_surf);
+ wsi.render_surface_scale = GetRenderSurfaceScale(env);
if (BootManager::BootCore(std::move(boot), wsi))
{
ButtonManager::Init(SConfig::GetInstance().GetGameID());
@@ -650,14 +697,14 @@ static void Run(const std::vector<std::string>& paths, bool first_open,
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_Run___3Ljava_lang_String_2Z(
JNIEnv* env, jobject obj, jobjectArray jPaths, jboolean jfirstOpen)
{
- Run(JStringArrayToVector(env, jPaths), jfirstOpen);
+ Run(env, JStringArrayToVector(env, jPaths), jfirstOpen);
}
JNIEXPORT void JNICALL
Java_org_dolphinemu_dolphinemu_NativeLibrary_Run___3Ljava_lang_String_2Ljava_lang_String_2Z(
JNIEnv* env, jobject obj, jobjectArray jPaths, jstring jSavestate, jboolean jDeleteSavestate)
{
- Run(JStringArrayToVector(env, jPaths), false, GetJString(env, jSavestate), jDeleteSavestate);
+ Run(env, JStringArrayToVector(env, jPaths), false, GetJString(env, jSavestate), jDeleteSavestate);
}
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_ChangeDisc(JNIEnv* env,