Merge branch 'feature_openxr_6dof' into feature_openxr_stereo

This commit is contained in:
Lubos 2022-08-15 17:23:57 +02:00
commit 43bd9b9086
8 changed files with 28 additions and 9 deletions

View File

@ -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.

View File

@ -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;

View File

@ -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
};

View File

@ -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),
};

View File

@ -457,6 +457,7 @@ public:
bool bEnableVR;
bool bEnable6DoF;
bool bEnableStereo;
int iCanvasDistance;
int iFieldOfViewPercentage;
// Debugger

View File

@ -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[] = {

View File

@ -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(), ""));
}
}

View File

@ -142,6 +142,10 @@
#include <mach-o/dyld.h>
#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<int> 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) {