Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OpenXR - Anti-flickering rendering flow added #19361

Merged
merged 3 commits into from
Jul 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 20 additions & 29 deletions Common/VR/PPSSPPVR.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -388,15 +388,9 @@ void UpdateVRInput(bool haptics, float dp_xscale, float dp_yscale) {
g_Config.fCameraHeight = clampFloat(g_Config.fCameraHeight, -150.0f, 150.0f);
break;
case JOYSTICK_AXIS_Z:
if (g_Config.bEnableVR) {
if (axis.second < -0.75f) g_Config.fHeadUpDisplayScale -= 0.01f;
if (axis.second > 0.75f) g_Config.fHeadUpDisplayScale += 0.01f;
g_Config.fHeadUpDisplayScale = clampFloat(g_Config.fHeadUpDisplayScale, 0.0f, 1.5f);
} else {
if (axis.second < -0.75f) g_Config.fCanvas3DDistance += 0.1f;
if (axis.second > 0.75f) g_Config.fCanvas3DDistance -= 0.1f;
g_Config.fCanvas3DDistance = clampFloat(g_Config.fCanvas3DDistance, 1.0f, 15.0f);
}
if (axis.second < -0.75f) g_Config.fCameraPitch -= 0.5f;
if (axis.second > 0.75f) g_Config.fCameraPitch += 0.5f;
g_Config.fCameraPitch = clampFloat(g_Config.fCameraPitch, -90.0f, 90.0f);
break;
case JOYSTICK_AXIS_RZ:
if (axis.second > 0.75f) g_Config.fCameraDistance -= 0.1f;
Expand Down Expand Up @@ -539,11 +533,10 @@ bool UpdateVRKeys(const KeyInput &key) {

// Reset camera adjust
if (pspKeys[VIRTKEY_VR_CAMERA_ADJUST] && pspKeys[VIRTKEY_VR_CAMERA_RESET]) {
g_Config.fCanvas3DDistance = 3.0f;
g_Config.fCameraHeight = 0;
g_Config.fCameraSide = 0;
g_Config.fCameraDistance = 0;
g_Config.fHeadUpDisplayScale = 0.3f;
g_Config.fCameraPitch = 0;
}

//block keys by camera adjust
Expand Down Expand Up @@ -667,12 +660,16 @@ bool StartVRRender() {
M[10] = -1;
M[11] = -(fovHack + fovHack);
M[14] = -(nearZ + nearZ);
if (g_Config.bAntiFlickeringFlow) {
M[0] /= 2.0f;
}
memcpy(vrMatrix[VR_PROJECTION_MATRIX], M, sizeof(float) * 16);

// Decide if the scene is 3D or not
VR_SetConfigFloat(VR_CONFIG_CANVAS_ASPECT, 480.0f / 272.0f);
if (g_Config.bEnableVR && !vrIncompatibleGame && (appMode == VR_GAME_MODE) && vrScene) {
VR_SetConfig(VR_CONFIG_MODE, vrStereo ? VR_MODE_STEREO_6DOF : VR_MODE_MONO_6DOF);
VR_SetConfig(VR_CONFIG_REPROJECTION, g_Config.bAntiFlickeringFlow ? 0 : 1);
vrFlatGame = false;
} else if (appMode == VR_GAME_MODE) {
VR_SetConfig(VR_CONFIG_MODE, vrStereo ? VR_MODE_STEREO_SCREEN : VR_MODE_MONO_SCREEN);
Expand All @@ -689,7 +686,7 @@ bool StartVRRender() {

// Set customizations
VR_SetConfigFloat(VR_CONFIG_CANVAS_DISTANCE, vrScene && (appMode == VR_GAME_MODE) ? g_Config.fCanvas3DDistance : g_Config.fCanvasDistance);
VR_SetConfig(VR_CONFIG_PASSTHROUGH, g_Config.bPassthrough);
VR_SetConfig(VR_CONFIG_PASSTHROUGH, g_Config.bPassthrough && IsPassthroughSupported());
return true;
}
return false;
Expand Down Expand Up @@ -874,23 +871,13 @@ void UpdateVRViewMatrices() {
invView = XrPosef_Inverse(invView);
}

// apply camera pitch offset
// apply camera pitch
float s = sin(ToRadians(g_Config.fCameraPitch));
float c = cos(ToRadians(g_Config.fCameraPitch));
XrVector3f positionOffset = {g_Config.fCameraSide, g_Config.fCameraHeight, g_Config.fCameraDistance};
if (!flatScreen) {
float pitchOffset = 0;
switch (g_Config.iCameraPitch) {
case 1: //Top view -> First person
pitchOffset = 90;
positionOffset = {positionOffset.x, positionOffset.z, -positionOffset.y};
break;
case 2: //First person -> Top view
pitchOffset = -90;
positionOffset = {positionOffset.x, -positionOffset.z + 20, positionOffset.y};
break;
}
XrQuaternionf rotationOffset = XrQuaternionf_CreateFromVectorAngle({1, 0, 0}, ToRadians(pitchOffset));
invView.orientation = XrQuaternionf_Multiply(rotationOffset, invView.orientation);
}
positionOffset = {positionOffset.x, s * positionOffset.z + c * positionOffset.y, c * positionOffset.z - s * positionOffset.y};
XrQuaternionf rotationOffset = XrQuaternionf_CreateFromVectorAngle({1, 0, 0}, ToRadians(g_Config.fCameraPitch));
invView.orientation = XrQuaternionf_Multiply(rotationOffset, invView.orientation);

// decompose rotation
XrVector3f rotation = XrQuaternionf_ToEulerAngles(invView.orientation);
Expand All @@ -906,12 +893,16 @@ void UpdateVRViewMatrices() {
XrQuaternionf yaw = XrQuaternionf_CreateFromVectorAngle({0, 1, 0}, mYaw);
XrQuaternionf roll = XrQuaternionf_CreateFromVectorAngle({0, 0, 1}, mRoll);
invView.orientation = XrQuaternionf_Multiply(roll, XrQuaternionf_Multiply(pitch, yaw));
if (!VR_GetConfig(VR_CONFIG_REPROJECTION)) {
float axis = vrMirroring[VR_MIRRORING_PITCH] ? -1.0f : 1.0f;
invView.orientation = XrQuaternionf_CreateFromVectorAngle({axis, 0, 0}, ToRadians(g_Config.fCameraPitch));
}

float M[16];
XrQuaternionf_ToMatrix4f(&invView.orientation, M);

// Apply 6Dof head movement
if (g_Config.bEnable6DoF && !g_Config.bHeadRotationEnabled && (g_Config.iCameraPitch == 0)) {
if (g_Config.bEnable6DoF && !g_Config.bHeadRotationEnabled) {
M[3] -= vrView[0].pose.position.x * (vrMirroring[VR_MIRRORING_AXIS_X] ? -1.0f : 1.0f) * scale;
M[7] -= vrView[0].pose.position.y * (vrMirroring[VR_MIRRORING_AXIS_Y] ? -1.0f : 1.0f) * scale;
M[11] -= vrView[0].pose.position.z * (vrMirroring[VR_MIRRORING_AXIS_Z] ? -1.0f : 1.0f) * scale;
Expand Down
18 changes: 12 additions & 6 deletions Common/VR/VRRenderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,9 @@ void VR_EndFrame( engine_t* engine ) {
void VR_FinishFrame( engine_t* engine ) {
int vrMode = vrConfig[VR_CONFIG_MODE];
XrCompositionLayerProjectionView projection_layer_elements[2] = {};
if ((vrMode == VR_MODE_MONO_6DOF) || (vrMode == VR_MODE_SBS_6DOF) || (vrMode == VR_MODE_STEREO_6DOF)) {
bool headTracking = (vrMode == VR_MODE_MONO_6DOF) || (vrMode == VR_MODE_SBS_6DOF) || (vrMode == VR_MODE_STEREO_6DOF);
bool reprojection = vrConfig[VR_CONFIG_REPROJECTION];
if (headTracking && reprojection) {
VR_SetConfigFloat(VR_CONFIG_MENU_YAW, hmdorientation.y);

for (int eye = 0; eye < ovrMaxNumEyes; eye++) {;
Expand Down Expand Up @@ -427,7 +429,7 @@ void VR_FinishFrame( engine_t* engine ) {
projection_layer.views = projection_layer_elements;

engine->appState.Layers[engine->appState.LayerCount++].Projection = projection_layer;
} else if ((vrMode == VR_MODE_MONO_SCREEN) || (vrMode == VR_MODE_SBS_SCREEN) || (vrMode == VR_MODE_STEREO_SCREEN)) {
} else {

// Flat screen pose
float distance = VR_GetConfigFloat(VR_CONFIG_CANVAS_DISTANCE) / 4.0f - 1.0f;
Expand Down Expand Up @@ -459,12 +461,18 @@ void VR_FinishFrame( engine_t* engine ) {
cylinder_layer.radius = 2.0f;
cylinder_layer.centralAngle = (float)(M_PI * 0.5);
cylinder_layer.aspectRatio = VR_GetConfigFloat(VR_CONFIG_CANVAS_ASPECT);
if (headTracking && !reprojection) {
float width = engine->appState.ViewConfigurationView[0].recommendedImageRectWidth;
float height = engine->appState.ViewConfigurationView[0].recommendedImageRectHeight;
cylinder_layer.aspectRatio = 2.0f * width / height;
cylinder_layer.centralAngle = (float)(M_PI);
}

// Build the cylinder layer
if (vrMode == VR_MODE_MONO_SCREEN) {
if ((vrMode == VR_MODE_MONO_SCREEN) || (vrMode == VR_MODE_MONO_6DOF)) {
cylinder_layer.eyeVisibility = XR_EYE_VISIBILITY_BOTH;
engine->appState.Layers[engine->appState.LayerCount++].Cylinder = cylinder_layer;
} else if (vrMode == VR_MODE_SBS_SCREEN) {
} else if ((vrMode == VR_MODE_SBS_SCREEN) || (vrMode == VR_MODE_SBS_6DOF)) {
cylinder_layer.eyeVisibility = XR_EYE_VISIBILITY_LEFT;
cylinder_layer.subImage.imageRect.extent.width /= 2;
engine->appState.Layers[engine->appState.LayerCount++].Cylinder = cylinder_layer;
Expand All @@ -478,8 +486,6 @@ void VR_FinishFrame( engine_t* engine ) {
cylinder_layer.subImage.swapchain = engine->appState.Renderer.FrameBuffer[1].ColorSwapChain.Handle;
engine->appState.Layers[engine->appState.LayerCount++].Cylinder = cylinder_layer;
}
} else {
assert(false);
}

// Compose the layers for this frame.
Expand Down
2 changes: 1 addition & 1 deletion Common/VR/VRRenderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

enum VRConfig {
//switching between mode
VR_CONFIG_MODE, VR_CONFIG_PASSTHROUGH, VR_CONFIG_CANVAS_6DOF,
VR_CONFIG_MODE, VR_CONFIG_PASSTHROUGH, VR_CONFIG_CANVAS_6DOF, VR_CONFIG_REPROJECTION,
//mouse cursor
VR_CONFIG_MOUSE_SIZE, VR_CONFIG_MOUSE_X, VR_CONFIG_MOUSE_Y,
//viewport setup
Expand Down
5 changes: 3 additions & 2 deletions Core/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -954,17 +954,18 @@ static const ConfigSetting themeSettings[] = {

static const ConfigSetting vrSettings[] = {
ConfigSetting("VREnable", &g_Config.bEnableVR, true, CfgFlag::PER_GAME),
ConfigSetting("VREnable6DoF", &g_Config.bEnable6DoF, true, CfgFlag::PER_GAME),
ConfigSetting("VREnable6DoF", &g_Config.bEnable6DoF, false, CfgFlag::PER_GAME),
ConfigSetting("VREnableStereo", &g_Config.bEnableStereo, false, CfgFlag::PER_GAME),
ConfigSetting("VREnableMotions", &g_Config.bEnableMotions, true, CfgFlag::PER_GAME),
ConfigSetting("VRForce72Hz", &g_Config.bForce72Hz, true, CfgFlag::PER_GAME),
ConfigSetting("VRAntiFlickeringFlow", &g_Config.bAntiFlickeringFlow, true, CfgFlag::PER_GAME),
ConfigSetting("VRManualForceVR", &g_Config.bManualForceVR, false, CfgFlag::PER_GAME),
ConfigSetting("VRPassthrough", &g_Config.bPassthrough, false, CfgFlag::PER_GAME),
ConfigSetting("VRRescaleHUD", &g_Config.bRescaleHUD, true, CfgFlag::PER_GAME),
ConfigSetting("VRCameraDistance", &g_Config.fCameraDistance, 0.0f, CfgFlag::PER_GAME),
ConfigSetting("VRCameraHeight", &g_Config.fCameraHeight, 0.0f, CfgFlag::PER_GAME),
ConfigSetting("VRCameraSide", &g_Config.fCameraSide, 0.0f, CfgFlag::PER_GAME),
ConfigSetting("VRCameraPitch", &g_Config.iCameraPitch, 0, CfgFlag::PER_GAME),
ConfigSetting("VRCameraPitch", &g_Config.fCameraPitch, 0.0f, CfgFlag::PER_GAME),
ConfigSetting("VRCanvasDistance", &g_Config.fCanvasDistance, 12.0f, CfgFlag::DEFAULT),
ConfigSetting("VRCanvas3DDistance", &g_Config.fCanvas3DDistance, 3.0f, CfgFlag::DEFAULT),
ConfigSetting("VRFieldOfView", &g_Config.fFieldOfViewPercentage, 100.0f, CfgFlag::PER_GAME),
Expand Down
3 changes: 2 additions & 1 deletion Core/Config.h
Original file line number Diff line number Diff line change
Expand Up @@ -482,13 +482,15 @@ struct Config {
bool bEnable6DoF;
bool bEnableStereo;
bool bEnableMotions;
bool bAntiFlickeringFlow;
bool bForce72Hz;
bool bManualForceVR;
bool bPassthrough;
bool bRescaleHUD;
float fCameraDistance;
float fCameraHeight;
float fCameraSide;
float fCameraPitch;
float fCanvasDistance;
float fCanvas3DDistance;
float fFieldOfViewPercentage;
Expand All @@ -497,7 +499,6 @@ struct Config {
float fHeadRotationScale;
bool bHeadRotationEnabled;
bool bHeadRotationSmoothing;
int iCameraPitch;

// Debugger
int iDisasmWindowX;
Expand Down
4 changes: 2 additions & 2 deletions GPU/Common/FramebufferManagerCommon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
float aspect = 272.0f / 480.0f * (g_Config.bAntiFlickeringFlow ? 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 = 0.1f;
float zoom = g_Config.bAntiFlickeringFlow ? 0.4f : 0.1f;
u0 += zoom / aspect;
u1 -= zoom / aspect;
v0 += zoom;
Expand Down
3 changes: 2 additions & 1 deletion GPU/GLES/ShaderManagerGLES.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,8 @@ void LinkedShader::UpdateUniforms(const ShaderID &vsid, bool useBufferedRenderin
// Set HUD mode
if (gstate_c.Use(GPU_USE_VIRTUAL_REALITY)) {
if (GuessVRDrawingHUD(is2D, flatScreen)) {
render_->SetUniformF1(&u_scaleX, g_Config.fHeadUpDisplayScale * 480.0f / 272.0f);
float aspect = 480.0f / 272.0f * (g_Config.bAntiFlickeringFlow ? 0.5f : 1.0f);
render_->SetUniformF1(&u_scaleX, g_Config.fHeadUpDisplayScale * aspect);
render_->SetUniformF1(&u_scaleY, g_Config.fHeadUpDisplayScale);
} else {
render_->SetUniformF1(&u_scaleX, 1.0f);
Expand Down
5 changes: 3 additions & 2 deletions UI/GameSettingsScreen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1285,6 +1285,9 @@ void GameSettingsScreen::CreateVRSettings(UI::ViewGroup *vrSettings) {
vrSettings->Add(new CheckBox(&g_Config.bEnableVR, vr->T("Virtual reality")));
vrSettings->Add(new CheckBox(&g_Config.bEnable6DoF, vr->T("6DoF movement")));
vrSettings->Add(new CheckBox(&g_Config.bEnableStereo, vr->T("Stereoscopic vision (Experimental)")));
CheckBox* antiFlickering = new CheckBox(&g_Config.bAntiFlickeringFlow, vr->T("Anti-flickering flow"));
antiFlickering->SetEnabledPtr(&g_Config.bEnableVR);
vrSettings->Add(antiFlickering);
vrSettings->Add(new CheckBox(&g_Config.bForce72Hz, vr->T("Force 72Hz update")));
if (IsPassthroughSupported()) {
vrSettings->Add(new CheckBox(&g_Config.bPassthrough, vr->T("Enable passthrough")));
Expand All @@ -1308,8 +1311,6 @@ void GameSettingsScreen::CreateVRSettings(UI::ViewGroup *vrSettings) {
vrSettings->Add(new CheckBox(&g_Config.bEnableMotions, vr->T("Map controller movements to keys")));
PopupSliderChoiceFloat *vrMotions = vrSettings->Add(new PopupSliderChoiceFloat(&g_Config.fMotionLength, 0.3f, 1.0f, 0.5f, vr->T("Motion needed to generate action"), 0.1f, screenManager(), vr->T("m")));
vrMotions->SetEnabledPtr(&g_Config.bEnableMotions);
static const char *cameraPitchModes[] = { "Disabled", "Top view -> First person", "First person -> Top view" };
vrSettings->Add(new PopupMultiChoice(&g_Config.iCameraPitch, vr->T("Camera type"), cameraPitchModes, 0, 3, I18NCat::NONE, screenManager()));
}

UI::EventReturn GameSettingsScreen::OnAutoFrameskip(UI::EventParams &e) {
Expand Down
2 changes: 1 addition & 1 deletion assets/lang/ar_AE.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1418,7 +1418,7 @@ New version of PPSSPP available = ‎تتوفر نسخة جديدة من الب
[VR]
% of native FoV = % of native FoV
6DoF movement = 6DoF movement
Camera type = وضع الكاميرا
Anti-flickering flow = Anti-flickering flow
Distance to 2D menus and scenes = Distance to 2D menus and scenes
Distance to 3D scenes when VR disabled = Distance to 3D scenes when VR disabled
Experts only = Experts only
Expand Down
2 changes: 1 addition & 1 deletion assets/lang/az_AZ.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1410,7 +1410,7 @@ New version of PPSSPP available = New version of PPSSPP available
[VR]
% of native FoV = % of native FoV
6DoF movement = 6DoF movement
Camera type = Camera type
Anti-flickering flow = Anti-flickering flow
Distance to 2D menus and scenes = Distance to 2D menus and scenes
Distance to 3D scenes when VR disabled = Distance to 3D scenes when VR disabled
Experts only = Experts only
Expand Down
2 changes: 1 addition & 1 deletion assets/lang/bg_BG.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1410,7 +1410,7 @@ New version of PPSSPP available = Налична е нова версия на P
[VR]
% of native FoV = % of native FoV
6DoF movement = 6DoF movement
Camera type = Camera type
Anti-flickering flow = Anti-flickering flow
Distance to 2D menus and scenes = Distance to 2D menus and scenes
Distance to 3D scenes when VR disabled = Distance to 3D scenes when VR disabled
Experts only = Experts only
Expand Down
2 changes: 1 addition & 1 deletion assets/lang/ca_ES.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1410,7 +1410,7 @@ New version of PPSSPP available = Nova versió de PPSSPP disponible
[VR]
% of native FoV = % of native FoV
6DoF movement = 6DoF movement
Camera type = Camera type
Anti-flickering flow = Anti-flickering flow
Distance to 2D menus and scenes = Distance to 2D menus and scenes
Distance to 3D scenes when VR disabled = Distance to 3D scenes when VR disabled
Experts only = Experts only
Expand Down
2 changes: 1 addition & 1 deletion assets/lang/cz_CZ.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1410,7 +1410,7 @@ New version of PPSSPP available = Je dostupná nová verze PPSSPP
[VR]
% of native FoV = % výchozího FoV
6DoF movement = 6DoF movement
Camera type = Camera type
Anti-flickering flow = Anti-flickering flow
Distance to 2D menus and scenes = Distance to 2D menus and scenes
Distance to 3D scenes when VR disabled = Distance to 3D scenes when VR disabled
Experts only = Experts only
Expand Down
2 changes: 1 addition & 1 deletion assets/lang/da_DK.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1410,7 +1410,7 @@ New version of PPSSPP available = Ny version af PPSSPP tilgængelig
[VR]
% of native FoV = % of native FoV
6DoF movement = 6DoF movement
Camera type = Camera type
Anti-flickering flow = Anti-flickering flow
Distance to 2D menus and scenes = Distance to 2D menus and scenes
Distance to 3D scenes when VR disabled = Distance to 3D scenes when VR disabled
Experts only = Experts only
Expand Down
2 changes: 1 addition & 1 deletion assets/lang/de_DE.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1410,7 +1410,7 @@ New version of PPSSPP available = Neue PPSSPP Version verfügbar
[VR]
% of native FoV = % of native FoV
6DoF movement = 6DoF movement
Camera type = Kameratyp
Anti-flickering flow = Anti-flickering flow
Distance to 2D menus and scenes = Distance to 2D menus and scenes
Distance to 3D scenes when VR disabled = Distance to 3D scenes when VR disabled
Experts only = Experts only
Expand Down
2 changes: 1 addition & 1 deletion assets/lang/dr_ID.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1410,7 +1410,7 @@ New version of PPSSPP available = New version of PPSSPP available
[VR]
% of native FoV = % of native FoV
6DoF movement = 6DoF movement
Camera type = Camera type
Anti-flickering flow = Anti-flickering flow
Distance to 2D menus and scenes = Distance to 2D menus and scenes
Distance to 3D scenes when VR disabled = Distance to 3D scenes when VR disabled
Experts only = Experts only
Expand Down
2 changes: 1 addition & 1 deletion assets/lang/en_US.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1435,6 +1435,7 @@ Screen representation = Screen representation
[VR]
% of native FoV = % of native FoV
6DoF movement = 6DoF movement
Anti-flickering flow = Anti-flickering flow
Distance to 2D menus and scenes = Distance to 2D menus and scenes
Distance to 3D scenes when VR disabled = Distance to 3D scenes when VR disabled
Experts only = Experts only
Expand All @@ -1447,7 +1448,6 @@ Heads-up display detection = Heads-up display detection
Map controller movements to keys = Map controller movements to keys
Map HMD rotations on keys instead of VR camera = Map HMD rotations on keys instead of VR camera
Manual switching between flat screen and VR using SCREEN key = Manual switching between flat screen and VR using SCREEN key
Camera type = Camera type
Motion needed to generate action = Motion needed to generate action
Stereoscopic vision (Experimental) = Stereoscopic vision (Experimental)
Virtual reality = Virtual reality
Expand Down
2 changes: 1 addition & 1 deletion assets/lang/es_ES.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1412,7 +1412,7 @@ New version of PPSSPP available = Nueva versión de PPSSPP disponible
[VR]
% of native FoV = % de campo de visión nativo
6DoF movement = Movimiento 6DoF
Camera type = Camera type
Anti-flickering flow = Anti-flickering flow
Distance to 2D menus and scenes = Distancia de los menús y escenas 2D
Distance to 3D scenes when VR disabled = Distance to 3D scenes when VR disabled
Experts only = Experts only
Expand Down
2 changes: 1 addition & 1 deletion assets/lang/es_LA.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1412,7 +1412,7 @@ New version of PPSSPP available = Nueva versión de PPSSPP disponible
[VR]
% of native FoV = % of native FoV
6DoF movement = movimiento 6DoF
Camera type = Tipo de cámara
Anti-flickering flow = Anti-flickering flow
Distance to 2D menus and scenes = Distancia a menús y escenas 2D
Distance to 3D scenes when VR disabled = Distancia a escenas 3D cuando la realidad virtual está desactivada
Experts only = Solo expertos
Expand Down
2 changes: 1 addition & 1 deletion assets/lang/fa_IR.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1410,7 +1410,7 @@ New version of PPSSPP available = ورژن جدیدی از ppsspp موجود ا
[VR]
% of native FoV = % of native FoV
6DoF movement = 6DoF movement
Camera type = Camera type
Anti-flickering flow = Anti-flickering flow
Distance to 2D menus and scenes = Distance to 2D menus and scenes
Distance to 3D scenes when VR disabled = Distance to 3D scenes when VR disabled
Experts only = Experts only
Expand Down
2 changes: 1 addition & 1 deletion assets/lang/fi_FI.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1410,7 +1410,7 @@ New version of PPSSPP available = Uusi PPSSPP-versio saatavilla
[VR]
% of native FoV = % of native FoV
6DoF movement = 6DoF-liike (kuusi vapausastetta)
Camera type = Kameratyyppi
Anti-flickering flow = Anti-flickering flow
Distance to 2D menus and scenes = Etäisyys 2D-valikkoihin ja kohtauksiin
Distance to 3D scenes when VR disabled = Etäisyys 3D-kohtauksiin, kun VR on poistettu käytöstä
Experts only = Vain asiantuntijoille
Expand Down
2 changes: 1 addition & 1 deletion assets/lang/fr_FR.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1401,7 +1401,7 @@ New version of PPSSPP available = Nouvelle version de PPSSPP disponible
[VR]
% of native FoV = % of native FoV
6DoF movement = 6DoF movement
Camera type = Camera type
Anti-flickering flow = Anti-flickering flow
Distance to 2D menus and scenes = Distance to 2D menus and scenes
Distance to 3D scenes when VR disabled = Distance to 3D scenes when VR disabled
Experts only = Experts only
Expand Down
2 changes: 1 addition & 1 deletion assets/lang/gl_ES.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1410,7 +1410,7 @@ New version of PPSSPP available = Nova versión de PPSSPP dispoñible
[VR]
% of native FoV = % of native FoV
6DoF movement = 6DoF movement
Camera type = Camera type
Anti-flickering flow = Anti-flickering flow
Distance to 2D menus and scenes = Distance to 2D menus and scenes
Distance to 3D scenes when VR disabled = Distance to 3D scenes when VR disabled
Experts only = Experts only
Expand Down
Loading
Loading