mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-23 13:30:02 +00:00
Merge branch 'feature_openxr_6dof' into feature_openxr_stereo
This commit is contained in:
commit
43bd9b9086
@ -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.
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
@ -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),
|
||||
};
|
||||
|
||||
|
@ -457,6 +457,7 @@ public:
|
||||
bool bEnableVR;
|
||||
bool bEnable6DoF;
|
||||
bool bEnableStereo;
|
||||
int iCanvasDistance;
|
||||
int iFieldOfViewPercentage;
|
||||
|
||||
// Debugger
|
||||
|
@ -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[] = {
|
||||
|
@ -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(), ""));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user