OpenXR - Aspect ratio of menu background fixed

This commit is contained in:
Lubos 2022-11-22 21:49:52 +01:00
parent 59046b8f76
commit 70d30d1cf6
3 changed files with 31 additions and 0 deletions

View file

@ -42,6 +42,7 @@ static std::map<int, bool> pspKeys;
static int vr3DGeometryCount = 0; static int vr3DGeometryCount = 0;
static long vrCompat[VR_COMPAT_MAX]; static long vrCompat[VR_COMPAT_MAX];
static bool vrFlatGame = false;
static float vrMatrix[VR_MATRIX_COUNT][16]; static float vrMatrix[VR_MATRIX_COUNT][16];
static bool vrMirroring[VR_MIRRORING_COUNT]; static bool vrMirroring[VR_MIRRORING_COUNT];
@ -647,8 +648,12 @@ bool StartVRRender() {
VR_SetConfigFloat(VR_CONFIG_CANVAS_ASPECT, 480.0f / 272.0f); VR_SetConfigFloat(VR_CONFIG_CANVAS_ASPECT, 480.0f / 272.0f);
if (g_Config.bEnableVR && !pspKeys[CTRL_SCREEN] && (appMode == VR_GAME_MODE) && (vr3DGeometryCount > 15)) { if (g_Config.bEnableVR && !pspKeys[CTRL_SCREEN] && (appMode == VR_GAME_MODE) && (vr3DGeometryCount > 15)) {
VR_SetConfig(VR_CONFIG_MODE, stereo ? VR_MODE_STEREO_6DOF : VR_MODE_MONO_6DOF); VR_SetConfig(VR_CONFIG_MODE, stereo ? VR_MODE_STEREO_6DOF : VR_MODE_MONO_6DOF);
vrFlatGame = false;
} else { } else {
VR_SetConfig(VR_CONFIG_MODE, stereo ? VR_MODE_STEREO_SCREEN : VR_MODE_MONO_SCREEN); VR_SetConfig(VR_CONFIG_MODE, stereo ? VR_MODE_STEREO_SCREEN : VR_MODE_MONO_SCREEN);
if (IsGameVRScene()) {
vrFlatGame = true;
}
} }
vr3DGeometryCount /= 2; vr3DGeometryCount /= 2;
@ -693,11 +698,19 @@ bool IsMultiviewSupported() {
return false; return false;
} }
bool IsFlatVRGame() {
return vrFlatGame;
}
bool IsFlatVRScene() { bool IsFlatVRScene() {
int vrMode = VR_GetConfig(VR_CONFIG_MODE); int vrMode = VR_GetConfig(VR_CONFIG_MODE);
return (vrMode == VR_MODE_MONO_SCREEN) || (vrMode == VR_MODE_STEREO_SCREEN); return (vrMode == VR_MODE_MONO_SCREEN) || (vrMode == VR_MODE_STEREO_SCREEN);
} }
bool IsGameVRScene() {
return (appMode == VR_GAME_MODE) || (appMode == VR_DIALOG_MODE);
}
bool Is2DVRObject(float* projMatrix, bool ortho) { bool Is2DVRObject(float* projMatrix, bool ortho) {
// Quick analyze if the object is in 2D // Quick analyze if the object is in 2D

View file

@ -50,7 +50,9 @@ void PostVRFrameRender();
int GetVRFBOIndex(); int GetVRFBOIndex();
int GetVRPassesCount(); int GetVRPassesCount();
bool IsMultiviewSupported(); bool IsMultiviewSupported();
bool IsFlatVRGame();
bool IsFlatVRScene(); bool IsFlatVRScene();
bool IsGameVRScene();
bool Is2DVRObject(float* projMatrix, bool ortho); bool Is2DVRObject(float* projMatrix, bool ortho);
void UpdateVRParams(float* projMatrix, float* viewMatrix); void UpdateVRParams(float* projMatrix, float* viewMatrix);
void UpdateVRProjection(float* projMatrix, float* leftEye, float* rightEye); void UpdateVRProjection(float* projMatrix, float* leftEye, float* rightEye);

View file

@ -27,6 +27,7 @@
#include "Common/Math/lin/matrix4x4.h" #include "Common/Math/lin/matrix4x4.h"
#include "Common/Math/math_util.h" #include "Common/Math/math_util.h"
#include "Common/System/Display.h" #include "Common/System/Display.h"
#include "Common/VR/PPSSPPVR.h"
#include "Common/CommonTypes.h" #include "Common/CommonTypes.h"
#include "Common/StringUtils.h" #include "Common/StringUtils.h"
#include "Core/Config.h" #include "Core/Config.h"
@ -1452,6 +1453,21 @@ void FramebufferManagerCommon::CopyDisplayToOutput(bool reallyDirty) {
float u1 = (480.0f + offsetX) / (float)vfb->bufferWidth; float u1 = (480.0f + offsetX) / (float)vfb->bufferWidth;
float v1 = (272.0f + offsetY) / (float)vfb->bufferHeight; float v1 = (272.0f + offsetY) / (float)vfb->bufferHeight;
//clip the VR framebuffer to keep the aspect ratio
if (IsVREnabled() && !IsFlatVRGame() && !IsGameVRScene()) {
float aspect = 272.0f / 480.0f;
float clipY = 272.0f * (1.0f - aspect) / 2.0f;
v0 = (clipY + offsetY) / (float)vfb->bufferHeight;
v1 = (272.0f - clipY + offsetY) / (float)vfb->bufferHeight;
//zoom inside
float zoom = 0.1f;
u0 += zoom / aspect;
u1 -= zoom / aspect;
v0 += zoom;
v1 -= zoom;
}
textureCache_->ForgetLastTexture(); textureCache_->ForgetLastTexture();
int uvRotation = useBufferedRendering_ ? g_Config.iInternalScreenRotation : ROTATION_LOCKED_HORIZONTAL; int uvRotation = useBufferedRendering_ ? g_Config.iInternalScreenRotation : ROTATION_LOCKED_HORIZONTAL;