[Tizen] Add screen and client rotation itself function
[platform/core/uifw/dali-core.git] / dali / internal / update / render-tasks / scene-graph-camera.h
index f75f81b..f61ddc6 100644 (file)
@@ -161,6 +161,11 @@ public:
   void SetFarClippingPlane( float farClippingPlane );
 
   /**
+   * @copydoc Dali::Internal::CameraActor::RotateProjection
+   */
+  void RotateProjection( int rotationAngle );
+
+  /**
    * @copydoc Dali::Internal::CameraActor::SetTarget
    */
   void SetTargetPosition( const Vector3& targetPosition );
@@ -224,6 +229,13 @@ public:
   const Matrix& GetInverseViewProjectionMatrix( BufferIndex bufferIndex ) const;
 
   /**
+   * Retrieve the final projection-matrix; this is double buffered for input handling.
+   * @param[in] bufferIndex The buffer to read from.
+   * @return The projection-matrix that should be used to render.
+   */
+  const Matrix& GetFinalProjectionMatrix( BufferIndex bufferIndex ) const;
+
+  /**
    * Retrieve the projection-matrix property querying interface.
    * @pre The camera is on-stage.
    * @return The projection-matrix property querying interface.
@@ -295,6 +307,7 @@ private:
 
   uint32_t                  mUpdateViewFlag;       ///< This is non-zero if the view matrix requires an update
   uint32_t                  mUpdateProjectionFlag; ///< This is non-zero if the projection matrix requires an update
+  int                       mProjectionRotation;   ///< The rotaion angle of the projection
   const Node*                   mNode;                 ///< The node this scene graph camera belongs to
 
 public:  // PROPERTIES
@@ -323,6 +336,7 @@ public:  // PROPERTIES
 
   DoubleBuffered< FrustumPlanes > mFrustum;               ///< Clipping frustum; double buffered for input handling
   DoubleBuffered< Matrix >        mInverseViewProjection; ///< Inverted viewprojection; double buffered for input handling
+  DoubleBuffered< Matrix >        mFinalProjection;       ///< Final projection matrix; double buffered for input handling
 
 };
 
@@ -330,7 +344,7 @@ public:  // PROPERTIES
 
 inline void SetTypeMessage( EventThreadServices& eventThreadServices, const Camera& camera, Dali::Camera::Type parameter )
 {
-  typedef MessageValue1< Camera, Dali::Camera::Type > LocalType;
+  using LocalType = MessageValue1<Camera, Dali::Camera::Type>;
 
   // Reserve some memory inside the message queue
   uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
@@ -341,7 +355,7 @@ inline void SetTypeMessage( EventThreadServices& eventThreadServices, const Came
 
 inline void SetProjectionModeMessage( EventThreadServices& eventThreadServices, const Camera& camera, Dali::Camera::ProjectionMode parameter )
 {
-  typedef MessageValue1< Camera, Dali::Camera::ProjectionMode > LocalProjectionMode;
+  using LocalProjectionMode = MessageValue1<Camera, Dali::Camera::ProjectionMode>;
 
   // Reserve some memory inside the message queue
   uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalProjectionMode ) );
@@ -352,7 +366,7 @@ inline void SetProjectionModeMessage( EventThreadServices& eventThreadServices,
 
 inline void SetFieldOfViewMessage( EventThreadServices& eventThreadServices, const Camera& camera, float parameter )
 {
-  typedef MessageValue1< Camera, float > LocalType;
+  using LocalType = MessageValue1<Camera, float>;
 
   // Reserve some memory inside the message queue
   uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
@@ -363,7 +377,7 @@ inline void SetFieldOfViewMessage( EventThreadServices& eventThreadServices, con
 
 inline void SetAspectRatioMessage( EventThreadServices& eventThreadServices, const Camera& camera, float parameter )
 {
-  typedef MessageValue1< Camera, float > LocalType;
+  using LocalType = MessageValue1<Camera, float>;
 
   // Reserve some memory inside the message queue
   uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
@@ -374,7 +388,7 @@ inline void SetAspectRatioMessage( EventThreadServices& eventThreadServices, con
 
 inline void SetLeftClippingPlaneMessage( EventThreadServices& eventThreadServices, const Camera& camera, float parameter )
 {
-  typedef MessageValue1< Camera, float > LocalType;
+  using LocalType = MessageValue1<Camera, float>;
 
   // Reserve some memory inside the message queue
   uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
@@ -385,7 +399,7 @@ inline void SetLeftClippingPlaneMessage( EventThreadServices& eventThreadService
 
 inline void SetRightClippingPlaneMessage( EventThreadServices& eventThreadServices, const Camera& camera, float parameter )
 {
-  typedef MessageValue1< Camera, float > LocalType;
+  using LocalType = MessageValue1<Camera, float>;
 
   // Reserve some memory inside the message queue
   uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
@@ -396,7 +410,7 @@ inline void SetRightClippingPlaneMessage( EventThreadServices& eventThreadServic
 
 inline void SetTopClippingPlaneMessage( EventThreadServices& eventThreadServices, const Camera& camera, float parameter )
 {
-  typedef MessageValue1< Camera, float > LocalType;
+  using LocalType = MessageValue1<Camera, float>;
 
   // Reserve some memory inside the message queue
   uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
@@ -407,7 +421,7 @@ inline void SetTopClippingPlaneMessage( EventThreadServices& eventThreadServices
 
 inline void SetBottomClippingPlaneMessage( EventThreadServices& eventThreadServices, const Camera& camera, float parameter )
 {
-  typedef MessageValue1< Camera, float > LocalType;
+  using LocalType = MessageValue1<Camera, float>;
 
   // Reserve some memory inside the message queue
   uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
@@ -418,7 +432,7 @@ inline void SetBottomClippingPlaneMessage( EventThreadServices& eventThreadServi
 
 inline void SetNearClippingPlaneMessage( EventThreadServices& eventThreadServices, const Camera& camera, float parameter )
 {
-  typedef MessageValue1< Camera, float > LocalType;
+  using LocalType = MessageValue1<Camera, float>;
 
   // Reserve some memory inside the message queue
   uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
@@ -429,7 +443,7 @@ inline void SetNearClippingPlaneMessage( EventThreadServices& eventThreadService
 
 inline void SetFarClippingPlaneMessage( EventThreadServices& eventThreadServices, const Camera& camera, float parameter )
 {
-  typedef MessageValue1< Camera, float > LocalType;
+  using LocalType = MessageValue1<Camera, float>;
 
   // Reserve some memory inside the message queue
   uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
@@ -440,7 +454,7 @@ inline void SetFarClippingPlaneMessage( EventThreadServices& eventThreadServices
 
 inline void SetTargetPositionMessage( EventThreadServices& eventThreadServices, const Camera& camera, const Vector3& parameter )
 {
-  typedef MessageValue1< Camera, Vector3 > LocalType;
+  using LocalType = MessageValue1<Camera, Vector3>;
 
   // Reserve some memory inside the message queue
   uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
@@ -451,7 +465,7 @@ inline void SetTargetPositionMessage( EventThreadServices& eventThreadServices,
 
 inline void SetInvertYAxisMessage( EventThreadServices& eventThreadServices, const Camera& camera, bool parameter )
 {
-  typedef MessageValue1< Camera, bool > LocalType;
+  using LocalType = MessageValue1<Camera, bool>;
 
   // Reserve some memory inside the message queue
   uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
@@ -460,6 +474,17 @@ inline void SetInvertYAxisMessage( EventThreadServices& eventThreadServices, con
   new (slot) LocalType( &camera, &Camera::SetInvertYAxis, parameter );
 }
 
+inline void RotateProjectionMessage( EventThreadServices& eventThreadServices, const Camera& camera, int parameter )
+{
+  typedef MessageValue1< Camera, int > LocalType;
+
+  // Reserve some memory inside the message queue
+  unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
+
+  // Construct message in the message queue memory; note that delete should not be called on the return value
+  new (slot) LocalType( &camera, &Camera::RotateProjection, parameter );
+}
+
 } // namespace SceneGraph
 
 } // namespace Internal