X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Fcommon%2Fscene-graph-scene.h;h=f1f0f5adde8d31c69e440bbb38ee865966dc6bf3;hb=9502baa1298289b85dcf263d723521ce6a400fd6;hp=14bcb086d48faab157728e31dacb4cd4bb32d517;hpb=ec0521a8612bce2a78f20822ac426b883c132523;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/update/common/scene-graph-scene.h b/dali/internal/update/common/scene-graph-scene.h index 14bcb08..f1f0f5a 100644 --- a/dali/internal/update/common/scene-graph-scene.h +++ b/dali/internal/update/common/scene-graph-scene.h @@ -30,9 +30,54 @@ namespace Dali { namespace Internal { +namespace Render +{ +class Renderer; +} + namespace SceneGraph { class RenderInstructionContainer; +class Node; + +struct DirtyRect +{ + DirtyRect(Node* node, Render::Renderer* renderer, int32_t frame, Rect& rect) + : node(node), + renderer(renderer), + frame(frame), + rect(rect), + visited(true) + { + } + + DirtyRect() = default; + + bool operator<(const DirtyRect& rhs) const + { + if(node == rhs.node) + { + if(renderer == rhs.renderer) + { + return frame > rhs.frame; // Most recent rects come first + } + else + { + return renderer < rhs.renderer; + } + } + else + { + return node < rhs.node; + } + } + + Node* node{nullptr}; + Render::Renderer* renderer{nullptr}; + int32_t frame{0}; + Rect rect{}; + bool visited{true}; +}; class Scene { @@ -213,6 +258,13 @@ public: return mClearValues; } + /** + * @brief Get ItemsDirtyRects + * + * @return the ItemsDirtyRects + */ + std::vector& GetItemsDirtyRects(); + private: // Render instructions describe what should be rendered during RenderManager::RenderScene() // Update manager updates instructions for the next frame while we render the current one @@ -224,9 +276,9 @@ private: bool mSkipRendering; ///< A flag to skip rendering - Rect mSurfaceRect; ///< The rectangle of surface which is related ot this scene. - int32_t mSurfaceOrientation; ///< The orientation of surface which is related of this scene - bool mSurfaceRectChanged; ///< The flag of surface's rectangle is changed when is resized, moved or rotated. + Rect mSurfaceRect; ///< The rectangle of surface which is related ot this scene. + int32_t mSurfaceOrientation; ///< The orientation of surface which is related of this scene + bool mSurfaceRectChanged; ///< The flag of surface's rectangle is changed when is resized, moved or rotated. bool mRotationCompletedAcknowledgement; ///< The flag of sending the acknowledgement to complete window rotation. // Render pass and render target @@ -240,8 +292,8 @@ private: Graphics::UniquePtr mRenderPassNoClear{nullptr}; ///< The render pass created to render the surface without clearing color Graphics::RenderTarget* mRenderTarget{nullptr}; ///< This is created in the event thread when surface is created/resized/replaced - // clear colors - std::vector mClearValues{}; + std::vector mClearValues{}; ///< Clear colors + std::vector mItemsDirtyRects{}; ///< Dirty rect list }; /// Messages