diff --git a/Common/VR/PPSSPPVR.cpp b/Common/VR/PPSSPPVR.cpp index e38d5c560c..a77bce6663 100644 --- a/Common/VR/PPSSPPVR.cpp +++ b/Common/VR/PPSSPPVR.cpp @@ -527,7 +527,7 @@ bool StartVRRender() { // VR flags bool vrIncompatibleGame = PSP_CoreParameter().compat.vrCompat().ForceFlatScreen; - bool vrMode = (g_Config.bEnableVR || g_Config.bEnableImmersiveVR) && !vrIncompatibleGame; + bool vrMode = (g_Config.bEnableVR || IsImmersiveVRMode()) && !vrIncompatibleGame; bool vrScene = !vrFlatForced && (g_Config.bManualForceVR || (vr3DGeometryCount > 15)); bool vrStereo = !PSP_CoreParameter().compat.vrCompat().ForceMono && g_Config.bEnableStereo; @@ -558,7 +558,7 @@ bool StartVRRender() { M[10] = -1; M[11] = -1; M[14] = -(nearZ + nearZ); - if (g_Config.bEnableImmersiveVR) { + if (IsImmersiveVRMode()) { M[0] /= 2.0f; } memcpy(vrMatrix[VR_PROJECTION_MATRIX], M, sizeof(float) * 16); @@ -567,7 +567,7 @@ bool StartVRRender() { VR_SetConfigFloat(VR_CONFIG_CANVAS_ASPECT, 480.0f / 272.0f); if (vrMode && vrScene && (appMode == VR_GAME_MODE)) { VR_SetConfig(VR_CONFIG_MODE, vrStereo ? VR_MODE_STEREO_6DOF : VR_MODE_MONO_6DOF); - VR_SetConfig(VR_CONFIG_REPROJECTION, g_Config.bEnableImmersiveVR ? 0 : 1); + VR_SetConfig(VR_CONFIG_REPROJECTION, IsImmersiveVRMode() ? 0 : 1); vrFlatGame = false; } else if (appMode == VR_GAME_MODE) { VR_SetConfig(VR_CONFIG_MODE, vrStereo ? VR_MODE_STEREO_SCREEN : VR_MODE_MONO_SCREEN); @@ -632,6 +632,10 @@ bool IsGameVRScene() { return (appMode == VR_GAME_MODE) || (appMode == VR_DIALOG_MODE); } +bool IsImmersiveVRMode() { + return g_Config.bEnableImmersiveVR && !PSP_CoreParameter().compat.vrCompat().IdentityViewHack; +} + bool Is2DVRObject(float* projMatrix, bool ortho) { // Quick analyze if the object is in 2D diff --git a/Common/VR/PPSSPPVR.h b/Common/VR/PPSSPPVR.h index 37c614bbc4..e77f5a0d07 100644 --- a/Common/VR/PPSSPPVR.h +++ b/Common/VR/PPSSPPVR.h @@ -56,6 +56,7 @@ bool IsPassthroughSupported(); bool IsFlatVRGame(); bool IsFlatVRScene(); bool IsGameVRScene(); +bool IsImmersiveVRMode(); bool Is2DVRObject(float* projMatrix, bool ortho); void UpdateVRParams(float* projMatrix); void UpdateVRProjection(float* projMatrix, float* output); diff --git a/GPU/Common/FramebufferManagerCommon.cpp b/GPU/Common/FramebufferManagerCommon.cpp index edc8a5bcfc..d6fbc3b16b 100644 --- a/GPU/Common/FramebufferManagerCommon.cpp +++ b/GPU/Common/FramebufferManagerCommon.cpp @@ -1664,13 +1664,13 @@ void FramebufferManagerCommon::CopyDisplayToOutput(bool reallyDirty) { //clip the VR framebuffer to keep the aspect ratio if (IsVREnabled() && !IsFlatVRGame() && !IsGameVRScene()) { - float aspect = 272.0f / 480.0f * (g_Config.bEnableImmersiveVR ? 2.0f : 1.0f); + float aspect = 272.0f / 480.0f * (IsImmersiveVRMode() ? 2.0f : 1.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 = g_Config.bEnableImmersiveVR ? 0.4f : 0.1f; + float zoom = IsImmersiveVRMode() ? 0.4f : 0.1f; u0 += zoom / aspect; u1 -= zoom / aspect; v0 += zoom; diff --git a/GPU/GLES/ShaderManagerGLES.cpp b/GPU/GLES/ShaderManagerGLES.cpp index e4c7993fc1..b1fd36871a 100644 --- a/GPU/GLES/ShaderManagerGLES.cpp +++ b/GPU/GLES/ShaderManagerGLES.cpp @@ -412,7 +412,7 @@ void LinkedShader::UpdateUniforms(const ShaderID &vsid, bool useBufferedRenderin // Set HUD mode if (gstate_c.Use(GPU_USE_VIRTUAL_REALITY)) { if (GuessVRDrawingHUD(is2D, flatScreen)) { - float aspect = 480.0f / 272.0f * (g_Config.bEnableImmersiveVR ? 0.5f : 1.0f); + float aspect = 480.0f / 272.0f * (IsImmersiveVRMode() ? 0.5f : 1.0f); render_->SetUniformF1(&u_scaleX, g_Config.fHeadUpDisplayScale * aspect); render_->SetUniformF1(&u_scaleY, g_Config.fHeadUpDisplayScale); } else {