[Tizen] Revert "Remove StereoMode"
[platform/core/uifw/dali-core.git] / dali / internal / update / render-tasks / scene-graph-camera.cpp
index f6ecce5..d59ec48 100644 (file)
@@ -96,12 +96,13 @@ void Frustum(Matrix& result, float left, float right, float bottom, float top, f
   m[12] = m[13] = m[15] = 0.0f;
 }
 
-void Perspective(Matrix& result, float fovy, float aspect, float near, float far, bool invertYAxis )
+void Perspective(Matrix& result, float fovy, float aspect, float near, float far, bool invertYAxis, const Vector2& stereoBias )
 {
   float frustumH = tanf( fovy * 0.5f ) * near;
   float frustumW = frustumH * aspect;
+  Vector2 bias = stereoBias * 0.5f;
 
-  Frustum(result, -frustumW, frustumW, -frustumH, frustumH, near, far, invertYAxis);
+  Frustum(result, -(frustumW + bias.x), frustumW - bias.x, -(frustumH + bias.y), frustumH - bias.y, near, far, invertYAxis);
 }
 
 void Orthographic(Matrix& result, float left, float right, float bottom, float top, float near, float far, bool invertYAxis)
@@ -151,6 +152,7 @@ const float Camera::DEFAULT_TOP_CLIPPING_PLANE(-400.0f);
 const float Camera::DEFAULT_BOTTOM_CLIPPING_PLANE(400.0f);
 const float Camera::DEFAULT_NEAR_CLIPPING_PLANE( 800.0f ); // default height of the screen
 const float Camera::DEFAULT_FAR_CLIPPING_PLANE( DEFAULT_NEAR_CLIPPING_PLANE + 2.f * DEFAULT_NEAR_CLIPPING_PLANE );
+const Vector2 Camera::DEFAULT_STEREO_BIAS( 0.0f, 0.0f );
 const Vector3 Camera::DEFAULT_TARGET_POSITION( 0.0f, 0.0f, 0.0f );
 
 
@@ -169,6 +171,7 @@ Camera::Camera()
   mBottomClippingPlane( DEFAULT_BOTTOM_CLIPPING_PLANE ),
   mNearClippingPlane( DEFAULT_NEAR_CLIPPING_PLANE ),
   mFarClippingPlane( DEFAULT_FAR_CLIPPING_PLANE ),
+  mStereoBias( DEFAULT_STEREO_BIAS ),
   mTargetPosition( DEFAULT_TARGET_POSITION ),
   mViewMatrix(),
   mProjectionMatrix(),
@@ -219,6 +222,12 @@ void Camera::SetAspectRatio( float aspectRatio )
   mUpdateProjectionFlag = UPDATE_COUNT;
 }
 
+void Camera::SetStereoBias( const Vector2& stereoBias )
+{
+  mStereoBias = stereoBias;
+  mUpdateProjectionFlag = UPDATE_COUNT;
+}
+
 void Camera::SetLeftClippingPlane( float leftClippingPlane )
 {
   mLeftClippingPlane = leftClippingPlane;
@@ -492,7 +501,8 @@ uint32_t Camera::UpdateProjection( BufferIndex updateBufferIndex )
                        mAspectRatio,
                        mNearClippingPlane,
                        mFarClippingPlane,
-                       mInvertYAxis );
+                       mInvertYAxis,
+                       mStereoBias );
           break;
         }
         case Dali::Camera::ORTHOGRAPHIC_PROJECTION: