mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
OpenXR - Sonic rivals rendering fix
This commit is contained in:
parent
7fab80200a
commit
abeeeb1cbf
4 changed files with 11 additions and 6 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Add table
Reference in a new issue