VR: Fix VR viewmode setting in stage 32/92132/1
authorTom Robinson <tom.robinson@samsung.com>
Thu, 13 Oct 2016 10:03:10 +0000 (11:03 +0100)
committerTom Robinson <tom.robinson@samsung.com>
Thu, 13 Oct 2016 10:03:10 +0000 (11:03 +0100)
Change-Id: I1a52ec73ebdfe6f855b63d54cd63e2b86dfec738

dali/internal/event/common/stage-impl.cpp

index 0cdbef5..a37cd55 100644 (file)
@@ -376,56 +376,27 @@ void Stage::UpdateCameras()
       const float interpupillaryDistanceMeters = mStereoBase / 1000.0f;
       const float eyeToCenterDistanceMeters = -( interpupillaryDistanceMeters * 0.5f );
 
-      if( mSize.width > mSize.height )
-      {
-        //todor share code with working section below?
-        // Stereo mode with horizontal split is for landscape mode. That's the reason for the cameras being rotated
-        // Top camera renders the scene as seen from the right eye and bottom camera as seen from left.
-        // Calculate separation in pixels along vertical axis ( mStereoBase is defined in millimetres )
-
-        // Precalculations:
-        const float sizeX = mSize.y / pixelAspect;
-        const float viewPortWidth = mSize.x / 2.0f;
-        const float cameraAspect = pixelAspect / ( sizeX / viewPortWidth );
-
-        // We should not alter the frustums based on eye separation.
-        mStereoInfo[LEFT].camera->SetPerspectiveProjection( Size( sizeX, mSize.height ), Vector2::ZERO );
-        mStereoInfo[LEFT].camera->SetAspectRatio( cameraAspect );
-        mStereoInfo[LEFT].camera->SetOrientation( Dali::ANGLE_0, Vector3::ZAXIS );
-        mStereoInfo[LEFT].renderTask.SetViewport( Viewport( 0, 0, viewPortWidth, mSize.height ) );
-
-        mStereoInfo[RIGHT].camera->SetPerspectiveProjection( Size( sizeX, mSize.height ), Vector2::ZERO );
-        mStereoInfo[RIGHT].camera->SetAspectRatio( cameraAspect );
-        mStereoInfo[RIGHT].camera->SetOrientation( Dali::ANGLE_0, Vector3::ZAXIS );
-        mStereoInfo[RIGHT].renderTask.SetViewport( Viewport( viewPortWidth, 0, viewPortWidth, mSize.height ) );
-      }
-      else
-      {
-        // Portrait aspect - default to VR on device.
-        // Precalculations:
-        const float sizeY = mSize.x * pixelAspect;
-        const float cameraAspect = pixelAspect * ( sizeY / ( mSize.y / 2.0f ) );
-
-        // Add the interpupillary distance to the near-plane minimum value.
-        const float nearPlane = Dali::Integration::Vr::DEFAULT_VR_NEAR_PLANE_METERS + interpupillaryDistanceMeters;
-        const float farPlane = Dali::Integration::Vr::DEFAULT_VR_FAR_PLANE_METERS;
-        const float fov = Radian( Degree( Dali::Integration::Vr::DEFAULT_VR_FIELD_OF_VIEW_DEGREES ) );
-
-        mStereoInfo[LEFT].camera->SetPerspectiveProjectionFovY( fov, cameraAspect, nearPlane, farPlane, Vector2( +eyeToCenterDistanceMeters, 0.0f ) );
-        mStereoInfo[LEFT].camera->SetOrientation( Dali::ANGLE_90, Vector3::ZAXIS );
-        mStereoInfo[LEFT].renderTask.SetViewport( Dali::Integration::Vr::DEFAULT_VR_VIEWPORT_DIMENSIONS );
-
-        mStereoInfo[RIGHT].camera->SetPerspectiveProjectionFovY( fov, cameraAspect, nearPlane, farPlane, Vector2( -eyeToCenterDistanceMeters, 0.0f ) );
-        mStereoInfo[RIGHT].camera->SetOrientation( Dali::ANGLE_90, Vector3::ZAXIS );
-        mStereoInfo[RIGHT].renderTask.SetViewport( Dali::Integration::Vr::DEFAULT_VR_VIEWPORT_DIMENSIONS );
-      }
-
-      // Same settings regardless of orientation:
+      // Portrait aspect - default to VR on device.
+      // Precalculations:
+      const float sizeY = mSize.x * pixelAspect;
+      const float cameraAspect = pixelAspect * ( sizeY / ( mSize.y / 2.0f ) );
+
+      // Add the interpupillary distance to the near-plane minimum value.
+      const float nearPlane = Dali::Integration::Vr::DEFAULT_VR_NEAR_PLANE_METERS + interpupillaryDistanceMeters;
+      const float farPlane = Dali::Integration::Vr::DEFAULT_VR_FAR_PLANE_METERS;
+      const float fov = Radian( Degree( Dali::Integration::Vr::DEFAULT_VR_FIELD_OF_VIEW_DEGREES ) );
+
       mStereoInfo[LEFT].camera->SetType( Camera::VR_EYE_LEFT );
       mStereoInfo[LEFT].camera->SetPosition( Vector3( 0.0f, -eyeToCenterDistanceMeters, 0.0f ) );
+      mStereoInfo[LEFT].camera->SetPerspectiveProjectionFovY( fov, cameraAspect, nearPlane, farPlane, Vector2( +eyeToCenterDistanceMeters, 0.0f ) );
+      mStereoInfo[LEFT].camera->SetOrientation( Dali::ANGLE_90, Vector3::ZAXIS );
+      mStereoInfo[LEFT].renderTask.SetViewport( Dali::Integration::Vr::DEFAULT_VR_VIEWPORT_DIMENSIONS );
 
       mStereoInfo[RIGHT].camera->SetType( Camera::VR_EYE_RIGHT );
       mStereoInfo[RIGHT].camera->SetPosition( Vector3( 0.0f, +eyeToCenterDistanceMeters, 0.0f ) );
+      mStereoInfo[RIGHT].camera->SetPerspectiveProjectionFovY( fov, cameraAspect, nearPlane, farPlane, Vector2( -eyeToCenterDistanceMeters, 0.0f ) );
+      mStereoInfo[RIGHT].camera->SetOrientation( Dali::ANGLE_90, Vector3::ZAXIS );
+      mStereoInfo[RIGHT].renderTask.SetViewport( Dali::Integration::Vr::DEFAULT_VR_VIEWPORT_DIMENSIONS );
 
       // Inform the VR manager of the Vr head node.
       Dali::Internal::SceneGraph::SetVrHeadNode( GetUpdateManager(), mDefaultCamera->GetCameraNode() );