X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Frender-tasks%2Fscene-graph-camera.h;h=7021b5a58c4fda6777c5ee824b9a09fa90eaec42;hb=d353bae63798f48237dc24c078c2e8cb2aa0bc62;hp=44b75185078ac5bdf94934719a1b152a582c2d79;hpb=853600b419feddf78277218a1145fe3e26c8b3af;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/update/render-tasks/scene-graph-camera.h b/dali/internal/update/render-tasks/scene-graph-camera.h index 44b7518..7021b5a 100644 --- a/dali/internal/update/render-tasks/scene-graph-camera.h +++ b/dali/internal/update/render-tasks/scene-graph-camera.h @@ -2,7 +2,7 @@ #define DALI_INTERNAL_SCENE_GRAPH_CAMERA_H /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2018 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -124,11 +124,6 @@ public: */ void SetAspectRatio( float aspectRatio ); - /** - * @copydoc Dali::Internal::CameraActor::SetStereoBias - */ - void SetStereoBias(const Vector2& stereoBias); - /** * @copydoc Dali::Internal::CameraActor::SetLeftClippingPlane */ @@ -160,11 +155,31 @@ public: void SetFarClippingPlane( float farClippingPlane ); /** + * @copydoc Dali::Internal::CameraActor::RotateProjection + */ + void RotateProjection( int rotationAngle ); + + /** * @copydoc Dali::Internal::CameraActor::SetTarget */ void SetTargetPosition( const Vector3& targetPosition ); /** + * Sets the reflection plane + * @param[in] plane reflection plane + */ + void SetReflectByPlane( const Vector4& plane ); + + /** + * Tests whether reflection is used + * @return True if used, False otherwise + */ + bool GetReflectionUsed() const + { + return mUseReflection; + } + + /** * Retrieve the view-matrix; this is double buffered for input handling. * @param[in] bufferIndex The buffer to read from. * @return The view-matrix. @@ -208,6 +223,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. @@ -251,14 +273,14 @@ private: * @param[in] bufferIndex The current update buffer index. * @return count how many frames ago the matrix was changed. */ - unsigned int UpdateViewMatrix( BufferIndex updateBufferIndex ); + uint32_t UpdateViewMatrix( BufferIndex updateBufferIndex ); /** * Recalculates the projection matrix. * @param[in] bufferIndex The current update buffer index. * @return count how many frames ago the matrix was changed. */ - unsigned int UpdateProjection( BufferIndex updateBufferIndex ); + uint32_t UpdateProjection( BufferIndex updateBufferIndex ); private: @@ -270,8 +292,16 @@ private: */ void UpdateFrustum( BufferIndex updateBufferIndex, bool normalize = true ); - unsigned int mUpdateViewFlag; ///< This is non-zero if the view matrix requires an update - unsigned int mUpdateProjectionFlag; ///< This is non-zero if the projection matrix requires an update + /** + * Adjust near plane for reflection + * @param perspective Perspective matrix + * @param clipPlane Clipping plane + */ + void AdjustNearPlaneForPerspective( Matrix& perspective, const Vector4& clipPlane ); + + 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 @@ -287,14 +317,20 @@ public: // PROPERTIES float mBottomClippingPlane; float mNearClippingPlane; float mFarClippingPlane; - Vector2 mStereoBias; Vector3 mTargetPosition; + Dali::Matrix mReflectionMtx; + Dali::Vector4 mReflectionPlane; + Dali::Vector4 mReflectionEye; + bool mUseReflection{ false }; + bool mUseReflectionClip{ false }; + InheritedMatrix mViewMatrix; ///< The viewMatrix; this is double buffered for input handling. InheritedMatrix mProjectionMatrix; ///< The projectionMatrix; this is double buffered for input handling. 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 }; @@ -305,7 +341,7 @@ inline void SetTypeMessage( EventThreadServices& eventThreadServices, const Came typedef MessageValue1< Camera, Dali::Camera::Type > LocalType; // Reserve some memory inside the message queue - unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); + uint32_t* 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::SetType, parameter ); @@ -316,7 +352,7 @@ inline void SetProjectionModeMessage( EventThreadServices& eventThreadServices, typedef MessageValue1< Camera, Dali::Camera::ProjectionMode > LocalProjectionMode; // Reserve some memory inside the message queue - unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalProjectionMode ) ); + uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalProjectionMode ) ); // Construct message in the message queue memory; note that delete should not be called on the return value new (slot) LocalProjectionMode( &camera, &Camera::SetProjectionMode, parameter ); @@ -327,7 +363,7 @@ inline void SetFieldOfViewMessage( EventThreadServices& eventThreadServices, con typedef MessageValue1< Camera, float > LocalType; // Reserve some memory inside the message queue - unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); + uint32_t* 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::SetFieldOfView, parameter ); @@ -338,29 +374,18 @@ inline void SetAspectRatioMessage( EventThreadServices& eventThreadServices, con typedef MessageValue1< Camera, float > LocalType; // Reserve some memory inside the message queue - unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); + uint32_t* 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::SetAspectRatio, parameter ); } -inline void SetStereoBiasMessage( EventThreadServices& eventThreadServices, const Camera& camera, const Vector2& parameter ) -{ - typedef MessageValue1< Camera, Vector2 > 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::SetStereoBias, parameter ); -} - inline void SetLeftClippingPlaneMessage( EventThreadServices& eventThreadServices, const Camera& camera, float parameter ) { typedef MessageValue1< Camera, float > LocalType; // Reserve some memory inside the message queue - unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); + uint32_t* 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::SetLeftClippingPlane, parameter ); @@ -371,7 +396,7 @@ inline void SetRightClippingPlaneMessage( EventThreadServices& eventThreadServic typedef MessageValue1< Camera, float > LocalType; // Reserve some memory inside the message queue - unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); + uint32_t* 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::SetRightClippingPlane, parameter ); @@ -382,7 +407,7 @@ inline void SetTopClippingPlaneMessage( EventThreadServices& eventThreadServices typedef MessageValue1< Camera, float > LocalType; // Reserve some memory inside the message queue - unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); + uint32_t* 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::SetTopClippingPlane, parameter ); @@ -393,7 +418,7 @@ inline void SetBottomClippingPlaneMessage( EventThreadServices& eventThreadServi typedef MessageValue1< Camera, float > LocalType; // Reserve some memory inside the message queue - unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); + uint32_t* 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::SetBottomClippingPlane, parameter ); @@ -404,7 +429,7 @@ inline void SetNearClippingPlaneMessage( EventThreadServices& eventThreadService typedef MessageValue1< Camera, float > LocalType; // Reserve some memory inside the message queue - unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); + uint32_t* 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::SetNearClippingPlane, parameter ); @@ -415,7 +440,7 @@ inline void SetFarClippingPlaneMessage( EventThreadServices& eventThreadServices typedef MessageValue1< Camera, float > LocalType; // Reserve some memory inside the message queue - unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); + uint32_t* 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::SetFarClippingPlane, parameter ); @@ -426,7 +451,7 @@ inline void SetTargetPositionMessage( EventThreadServices& eventThreadServices, typedef MessageValue1< Camera, Vector3 > LocalType; // Reserve some memory inside the message queue - unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); + uint32_t* 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::SetTargetPosition, parameter ); @@ -437,12 +462,23 @@ inline void SetInvertYAxisMessage( EventThreadServices& eventThreadServices, con typedef MessageValue1< Camera, bool > LocalType; // Reserve some memory inside the message queue - unsigned int* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); + uint32_t* 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::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