diff --git a/Common/GPU/OpenGL/GLRenderManager.cpp b/Common/GPU/OpenGL/GLRenderManager.cpp index f52808d6c7..c9897232d6 100644 --- a/Common/GPU/OpenGL/GLRenderManager.cpp +++ b/Common/GPU/OpenGL/GLRenderManager.cpp @@ -11,7 +11,6 @@ #ifdef OPENXR #include "Core/Config.h" #include "VR/VRBase.h" -#include "VR/VRInput.h" #include "VR/VRRenderer.h" #endif @@ -208,7 +207,7 @@ bool GLRenderManager::ThreadFrame() { VR_BeginFrame(VR_GetEngine()); // Decide if the scene is 3D or not - if (g_Config.bEnableVR && (VR_GetConfig(VR_CONFIG_3D_GEOMETRY_COUNT) > 15)) { + if (g_Config.bEnableVR && !VR_GetConfig(VR_CONFIG_FORCE_2D) && (VR_GetConfig(VR_CONFIG_3D_GEOMETRY_COUNT) > 15)) { VR_SetConfig(VR_CONFIG_MODE, g_Config.bEnableStereo ? VR_MODE_STEREO_6DOF : VR_MODE_MONO_6DOF); } else { VR_SetConfig(VR_CONFIG_MODE, VR_MODE_FLAT_SCREEN); @@ -217,12 +216,8 @@ bool GLRenderManager::ThreadFrame() { // Set customizations VR_SetConfig(VR_CONFIG_6DOF_ENABLED, g_Config.bEnable6DoF); + VR_SetConfig(VR_CONFIG_CANVAS_DISTANCE, g_Config.iCanvasDistance); VR_SetConfig(VR_CONFIG_FOV_SCALE, g_Config.iFieldOfViewPercentage); - - // hack to quick enable 2D mode in game - if (IN_VRGetButtonState(0) & ovrButton_GripTrigger) { - VR_SetConfig(VR_CONFIG_MODE, VR_MODE_FLAT_SCREEN); - } #endif // In case of syncs or other partial completion, we keep going until we complete a frame. diff --git a/Common/VR/VRRenderer.cpp b/Common/VR/VRRenderer.cpp index 82fa3d8fb0..4c9660e751 100644 --- a/Common/VR/VRRenderer.cpp +++ b/Common/VR/VRRenderer.cpp @@ -377,11 +377,12 @@ void VR_EndFrame( engine_t* engine ) { cylinder_layer.subImage.imageRect.extent.width = width; cylinder_layer.subImage.imageRect.extent.height = height; cylinder_layer.subImage.imageArrayIndex = 0; + float distance = vrConfig[VR_CONFIG_CANVAS_DISTANCE]; const XrVector3f axis = {0.0f, 1.0f, 0.0f}; XrVector3f pos = { - invViewTransform[0].position.x - sin(ToRadians(menuYaw)) * 6.0f, + invViewTransform[0].position.x - sin(ToRadians(menuYaw)) * distance, invViewTransform[0].position.y, - invViewTransform[0].position.z - cos(ToRadians(menuYaw)) * 6.0f + invViewTransform[0].position.z - cos(ToRadians(menuYaw)) * distance }; cylinder_layer.pose.orientation = XrQuaternionf_CreateFromVectorAngle(axis, ToRadians(menuYaw)); cylinder_layer.pose.position = pos; diff --git a/Common/VR/VRRenderer.h b/Common/VR/VRRenderer.h index 7471309794..a7ab247345 100644 --- a/Common/VR/VRRenderer.h +++ b/Common/VR/VRRenderer.h @@ -15,6 +15,8 @@ enum VRConfig { VR_CONFIG_MIRROR_ROLL, VR_CONFIG_3D_GEOMETRY_COUNT, VR_CONFIG_FOV_SCALE, + VR_CONFIG_FORCE_2D, + VR_CONFIG_CANVAS_DISTANCE, VR_CONFIG_MAX }; diff --git a/Core/Config.cpp b/Core/Config.cpp index bde8ff9b86..98e59076e9 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -1209,6 +1209,7 @@ static ConfigSetting vrSettings[] = { ConfigSetting("VREnable", &g_Config.bEnableVR, true), ConfigSetting("VREnable6DoF", &g_Config.bEnable6DoF, true), ConfigSetting("VREnableStereo", &g_Config.bEnableStereo, true), + ConfigSetting("VRCanvasDistance", &g_Config.iCanvasDistance, 6), ConfigSetting("VRFieldOfView", &g_Config.iFieldOfViewPercentage, 100), }; diff --git a/Core/Config.h b/Core/Config.h index 35e8931904..3ac22964d8 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -457,6 +457,7 @@ public: bool bEnableVR; bool bEnable6DoF; bool bEnableStereo; + int iCanvasDistance; int iFieldOfViewPercentage; // Debugger diff --git a/Core/KeyMapDefaults.cpp b/Core/KeyMapDefaults.cpp index d4aa8b13e0..d6d21639cb 100644 --- a/Core/KeyMapDefaults.cpp +++ b/Core/KeyMapDefaults.cpp @@ -317,6 +317,7 @@ static const DefMappingStruct defaultVRLeftController[] = { {CTRL_SELECT , NKCODE_BUTTON_THUMBL}, {CTRL_LTRIGGER , NKCODE_BUTTON_X}, {CTRL_RTRIGGER , NKCODE_BUTTON_Y}, + {CTRL_SCREEN , NKCODE_ALT_LEFT}, }; static const DefMappingStruct defaultVRRightController[] = { diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp index 0b51d6edf9..309436cb43 100644 --- a/UI/GameSettingsScreen.cpp +++ b/UI/GameSettingsScreen.cpp @@ -1121,6 +1121,7 @@ void GameSettingsScreen::CreateViews() { vrStereo->SetEnabledPtr(&g_Config.bEnableVR); PopupSliderChoice *vrFieldOfView = vrSettings->Add(new PopupSliderChoice(&g_Config.iFieldOfViewPercentage, 100, 150, vr->T("Field of view scale", "Headset's field of view scale"), 10, screenManager(), vr->T("% of native FoV"))); vrFieldOfView->SetEnabledPtr(&g_Config.bEnableVR); + vrSettings->Add(new PopupSliderChoice(&g_Config.iCanvasDistance, 1, 10, vr->T("Distance to 2D menus and scenes", "Distance to 2D menus and scenes"), 1, screenManager(), "")); } } diff --git a/UI/NativeApp.cpp b/UI/NativeApp.cpp index cc1e08ff4d..d740c323bc 100644 --- a/UI/NativeApp.cpp +++ b/UI/NativeApp.cpp @@ -142,6 +142,10 @@ #include #endif +#ifdef OPENXR +#include "VR/VRRenderer.h" +#endif + ScreenManager *screenManager; std::string config_filename; @@ -1297,6 +1301,19 @@ bool NativeTouch(const TouchInput &touch) { } bool NativeKey(const KeyInput &key) { + + // Hack to quick enable 2D mode in VR game mode. +#ifdef OPENXR + std::vector nativeKeys; + if (KeyMap::KeyToPspButton(key.deviceId, key.keyCode, &nativeKeys)) { + for (int& nativeKey : nativeKeys) { + if (nativeKey == CTRL_SCREEN) { + VR_SetConfig(VR_CONFIG_FORCE_2D, key.flags & KEY_DOWN); + } + } + } +#endif + // INFO_LOG(SYSTEM, "Key code: %i flags: %i", key.keyCode, key.flags); #if !defined(MOBILE_DEVICE) if (g_Config.bPauseExitsEmulator) {