android: Fix screen orientation & blurriness.
This commit is contained in:
		| @@ -6,15 +6,12 @@ package org.yuzu.yuzu_emu.activities | ||||
| import android.app.Activity | ||||
| import android.content.Context | ||||
| import android.content.Intent | ||||
| import android.content.res.Configuration | ||||
| import android.graphics.Rect | ||||
| import android.hardware.Sensor | ||||
| import android.hardware.SensorEvent | ||||
| import android.hardware.SensorEventListener | ||||
| import android.hardware.SensorManager | ||||
| import android.hardware.display.DisplayManager | ||||
| import android.os.Bundle | ||||
| import android.view.Display | ||||
| import android.view.InputDevice | ||||
| import android.view.KeyEvent | ||||
| import android.view.MotionEvent | ||||
| @@ -23,7 +20,6 @@ import android.view.View | ||||
| import android.view.inputmethod.InputMethodManager | ||||
| import androidx.activity.viewModels | ||||
| import androidx.appcompat.app.AppCompatActivity | ||||
| import androidx.core.content.getSystemService | ||||
| import androidx.core.view.WindowCompat | ||||
| import androidx.core.view.WindowInsetsCompat | ||||
| import androidx.core.view.WindowInsetsControllerCompat | ||||
| @@ -39,7 +35,6 @@ import org.yuzu.yuzu_emu.features.settings.model.SettingsViewModel | ||||
| import org.yuzu.yuzu_emu.fragments.EmulationFragment | ||||
| import org.yuzu.yuzu_emu.model.Game | ||||
| import org.yuzu.yuzu_emu.utils.ControllerMappingHelper | ||||
| import org.yuzu.yuzu_emu.utils.EmulationMenuSettings | ||||
| import org.yuzu.yuzu_emu.utils.ForegroundService | ||||
| import org.yuzu.yuzu_emu.utils.InputHandler | ||||
| import org.yuzu.yuzu_emu.utils.NfcReader | ||||
| @@ -148,11 +143,6 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { | ||||
|         super.onResume() | ||||
|         nfcReader.startScanning() | ||||
|         startMotionSensorListener() | ||||
|  | ||||
|         NativeLibrary.notifyOrientationChange( | ||||
|             EmulationMenuSettings.landscapeScreenLayout, | ||||
|             getAdjustedRotation() | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|     override fun onPause() { | ||||
| @@ -258,24 +248,6 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { | ||||
|  | ||||
|     override fun onAccuracyChanged(sensor: Sensor, i: Int) {} | ||||
|  | ||||
|     private fun getAdjustedRotation():Int { | ||||
|         val rotation = getSystemService<DisplayManager>()!!.getDisplay(Display.DEFAULT_DISPLAY).rotation | ||||
|         val config: Configuration = resources.configuration | ||||
|  | ||||
|         if ((config.screenLayout and Configuration.SCREENLAYOUT_LONG_YES) != 0 || | ||||
|             (config.screenLayout and Configuration.SCREENLAYOUT_LONG_NO) == 0 || | ||||
|             (config.screenLayout and Configuration.SCREENLAYOUT_SIZE_SMALL) != 0) { | ||||
|             return rotation | ||||
|         } | ||||
|         when (rotation) { | ||||
|             Surface.ROTATION_0 -> return Surface.ROTATION_90 | ||||
|             Surface.ROTATION_90 -> return Surface.ROTATION_0 | ||||
|             Surface.ROTATION_180 -> return Surface.ROTATION_270 | ||||
|             Surface.ROTATION_270 -> return Surface.ROTATION_180 | ||||
|         } | ||||
|         return rotation | ||||
|     } | ||||
|  | ||||
|     private fun restoreState(savedInstanceState: Bundle) { | ||||
|         game = savedInstanceState.parcelable(EXTRA_SELECTED_GAME)!! | ||||
|     } | ||||
|   | ||||
| @@ -94,14 +94,6 @@ public: | ||||
|         m_native_window = native_window; | ||||
|     } | ||||
|  | ||||
|     u32 ScreenRotation() const { | ||||
|         return m_screen_rotation; | ||||
|     } | ||||
|  | ||||
|     void SetScreenRotation(u32 screen_rotation) { | ||||
|         m_screen_rotation = screen_rotation; | ||||
|     } | ||||
|  | ||||
|     void InitializeGpuDriver(const std::string& hook_lib_dir, const std::string& custom_driver_dir, | ||||
|                              const std::string& custom_driver_name, | ||||
|                              const std::string& file_redirect_dir) { | ||||
| @@ -400,7 +392,6 @@ private: | ||||
|     // Window management | ||||
|     std::unique_ptr<EmuWindow_Android> m_window; | ||||
|     ANativeWindow* m_native_window{}; | ||||
|     u32 m_screen_rotation{}; | ||||
|  | ||||
|     // Core emulation | ||||
|     Core::System m_system; | ||||
| @@ -426,10 +417,6 @@ private: | ||||
|  | ||||
| } // Anonymous namespace | ||||
|  | ||||
| u32 GetAndroidScreenRotation() { | ||||
|     return EmulationSession::GetInstance().ScreenRotation(); | ||||
| } | ||||
|  | ||||
| static Core::SystemResultStatus RunEmulation(const std::string& filepath) { | ||||
|     Common::Log::Initialize(); | ||||
|     Common::Log::SetColorConsoleBackendEnabled(true); | ||||
| @@ -473,13 +460,6 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_surfaceDestroyed(JNIEnv* env, | ||||
|     EmulationSession::GetInstance().SurfaceChanged(); | ||||
| } | ||||
|  | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_notifyOrientationChange(JNIEnv* env, | ||||
|                                                                    [[maybe_unused]] jclass clazz, | ||||
|                                                                    jint layout_option, | ||||
|                                                                    jint rotation) { | ||||
|     return EmulationSession::GetInstance().SetScreenRotation(static_cast<u32>(rotation)); | ||||
| } | ||||
|  | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_setAppDirectory(JNIEnv* env, | ||||
|                                                            [[maybe_unused]] jclass clazz, | ||||
|                                                            jstring j_directory) { | ||||
|   | ||||
| @@ -37,10 +37,6 @@ | ||||
| #include "video_core/vulkan_common/vulkan_memory_allocator.h" | ||||
| #include "video_core/vulkan_common/vulkan_wrapper.h" | ||||
|  | ||||
| #ifdef ANDROID | ||||
| extern u32 GetAndroidScreenRotation(); | ||||
| #endif | ||||
|  | ||||
| namespace Vulkan { | ||||
|  | ||||
| namespace { | ||||
| @@ -78,47 +74,6 @@ struct ScreenRectVertex { | ||||
|     } | ||||
| }; | ||||
|  | ||||
| #ifdef ANDROID | ||||
|  | ||||
| std::array<f32, 4 * 4> MakeOrthographicMatrix(f32 width, f32 height) { | ||||
|     constexpr u32 ROTATION_0 = 0; | ||||
|     constexpr u32 ROTATION_90 = 1; | ||||
|     constexpr u32 ROTATION_180 = 2; | ||||
|     constexpr u32 ROTATION_270 = 3; | ||||
|  | ||||
|     // clang-format off | ||||
|     switch (GetAndroidScreenRotation()) { | ||||
|         case ROTATION_0: | ||||
|             // Desktop | ||||
|             return { 2.f / width, 0.f,          0.f, 0.f, | ||||
|                      0.f,         2.f / height, 0.f, 0.f, | ||||
|                      0.f,         0.f,          1.f, 0.f, | ||||
|                     -1.f,        -1.f,          0.f, 1.f}; | ||||
|         case ROTATION_180: | ||||
|             // Reverse desktop | ||||
|             return {-2.f / width, 0.f,          0.f, 0.f, | ||||
|                      0.f,        -2.f / height, 0.f, 0.f, | ||||
|                      0.f,         0.f,          1.f, 0.f, | ||||
|                      1.f,         1.f,          0.f, 1.f}; | ||||
|         case ROTATION_270: | ||||
|             // Reverse landscape | ||||
|             return { 0.f,         -2.f / width, 0.f, 0.f, | ||||
|                      2.f / height, 0.f,         0.f, 0.f, | ||||
|                      0.f,          0.f,         1.f, 0.f, | ||||
|                     -1.f,          1.f,         0.f, 1.f}; | ||||
|         case ROTATION_90: | ||||
|         default: | ||||
|             // Landscape | ||||
|             return { 0.f,          2.f / width, 0.f, 0.f, | ||||
|                     -2.f / height, 0.f,         0.f, 0.f, | ||||
|                      0.f,          0.f,         1.f, 0.f, | ||||
|                      1.f,         -1.f,         0.f, 1.f}; | ||||
|     } | ||||
|     // clang-format on | ||||
| } | ||||
|  | ||||
| #else | ||||
|  | ||||
| std::array<f32, 4 * 4> MakeOrthographicMatrix(f32 width, f32 height) { | ||||
|     // clang-format off | ||||
|     return { 2.f / width, 0.f,          0.f, 0.f, | ||||
| @@ -128,8 +83,6 @@ std::array<f32, 4 * 4> MakeOrthographicMatrix(f32 width, f32 height) { | ||||
|     // clang-format on | ||||
| } | ||||
|  | ||||
| #endif | ||||
|  | ||||
| u32 GetBytesPerPixel(const Tegra::FramebufferConfig& framebuffer) { | ||||
|     using namespace VideoCore::Surface; | ||||
|     return BytesPerBlock(PixelFormatFromGPUPixelFormat(framebuffer.pixel_format)); | ||||
|   | ||||
| @@ -231,7 +231,12 @@ void Swapchain::CreateSwapchain(const VkSurfaceCapabilitiesKHR& capabilities, bo | ||||
|         .imageSharingMode = VK_SHARING_MODE_EXCLUSIVE, | ||||
|         .queueFamilyIndexCount = 0, | ||||
|         .pQueueFamilyIndices = nullptr, | ||||
| #ifdef ANDROID | ||||
|         // On Android, do not allow surface rotation to deviate from the frontend. | ||||
|         .preTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, | ||||
| #else | ||||
|         .preTransform = capabilities.currentTransform, | ||||
| #endif | ||||
|         .compositeAlpha = alpha_flags, | ||||
|         .presentMode = present_mode, | ||||
|         .clipped = VK_FALSE, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user