+ /**
+ * Set the surface rectangle when surface is resized.
+ *
+ * @param[in] scene The resized scene.
+ * @param[in] rect The retangle representing the surface.
+ */
+ void SetSurfaceRect(const Rect<int32_t>& rect);
+
+ /**
+ * Get the surface rectangle.
+ *
+ * @return the current surface rectangle
+ */
+ const Rect<int32_t>& GetSurfaceRect() const;
+
+ /**
+ * Set the surface orientations when surface or screen is rotated.
+ *
+ * @param[in] windowOrientation The orientations value representing surface.
+ * @param[in] screenOrienation The orientations value representing screen.
+ */
+ void SetSurfaceOrientations(int32_t windowOrientation, int32_t screenOrienation);
+
+ /**
+ * Get the surface orientation.
+ *
+ * @return the current surface orientation
+ */
+ int32_t GetSurfaceOrientation() const;
+
+ /**
+ * Get the screen orientation.
+ *
+ * @return the current screen orientation
+ */
+ int32_t GetScreenOrientation() const;
+
+ /**
+ * Query wheter the surface rect is changed or not.
+ * @return true if the surface rect is changed.
+ */
+ bool IsSurfaceRectChanged();
+
+ /**
+ * @brief Set the internal flag to acknowledge surface rotation.
+ */
+ void SetRotationCompletedAcknowledgement();
+
+ /**
+ * @brief Query wheter is set to acknowledge for completing surface rotation.
+ * @return true it should be acknowledged.
+ */
+ bool IsRotationCompletedAcknowledgementSet();
+
+ /**
+ * Set the render target of the surface
+ *
+ * @param[in] renderTarget The render target.
+ */
+ void SetSurfaceRenderTargetCreateInfo(const Graphics::RenderTargetCreateInfo& renderTargetCreateInfo);
+
+ /**
+ * Get the render target created for the scene
+ *
+ * @return the render target
+ */
+ [[nodiscard]] Graphics::RenderTarget* GetSurfaceRenderTarget() const
+ {
+ return mRenderTarget.get();
+ }
+
+ /**
+ * Get the graphics render pass created for the scene
+ *
+ * @return the graphics render pass
+ */
+ [[nodiscard]] Graphics::RenderPass* GetGraphicsRenderPass(Graphics::AttachmentLoadOp loadOp, Graphics::AttachmentStoreOp storeOp) const
+ {
+ if(loadOp == Graphics::AttachmentLoadOp::CLEAR)
+ {
+ return mRenderPass.get();
+ }
+ else
+ {
+ return mRenderPassNoClear.get();
+ }
+ }
+
+ /**
+ * Get an initialized array of clear values which then can be modified and accessed to BeginRenderPass() command.
+ *
+ * @return the array of clear values
+ */
+ [[nodiscard]] auto& GetGraphicsRenderPassClearValues()
+ {
+ return mClearValues;
+ }
+
+ /**
+ * @brief Set a root of the Scene
+ *
+ * @param layer The root layer
+ */
+ void SetRoot(SceneGraph::Layer* layer)
+ {
+ mRoot = layer;
+ }
+
+ /**
+ * @brief Get a root of the Scene
+ *
+ * @return The root layer
+ */
+ SceneGraph::Layer* GetRoot() const
+ {
+ return mRoot;
+ }
+
+ /**
+ * @brief Get ItemsDirtyRects
+ *
+ * @return the ItemsDirtyRects
+ */
+ ItemsDirtyRectsContainer& GetItemsDirtyRects();
+
+private: