[Tizen] Implement partial update
[platform/core/uifw/dali-core.git] / dali / internal / event / rendering / frame-buffer-impl.h
old mode 100644 (file)
new mode 100755 (executable)
index f15b4bd..16c61f5
@@ -2,7 +2,7 @@
 #define DALI_INTERNAL_FRAME_BUFFER_H
 
 /*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2019 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.
 
 namespace Dali
 {
+
+namespace Integration
+{
+class RenderSurface;
+}
+
 namespace Internal
 {
 namespace Render
@@ -42,17 +48,31 @@ class FrameBuffer : public BaseObject
 {
 public:
 
-  typedef Dali::FrameBuffer::Format Format;
+  using Mask = Dali::FrameBuffer::Attachment::Mask;
+
+  /**
+   * @brief Create a new FrameBuffer
+   *
+   * @param[in] width       The width of the FrameBuffer
+   * @param[in] height      The height of the FrameBuffer
+   * @param[in] attachments The attachments comprising the format of the FrameBuffer (bit-mask)
+   * @return A smart-pointer to the newly allocated Texture.
+   */
+  static FrameBufferPtr New( uint32_t width, uint32_t height, Mask attachments );
 
   /**
    * @brief Create a new FrameBuffer
    *
-   * @param[in] width The width of the FrameBuffer
-   * @param[in] height The height of the FrameBuffer
-   * @param[in] format The format of the FrameBuffer
+   * @param[in] renderSurface   The render surface
+   * @param[in] attachments     The attachments comprising the format of the FrameBuffer (bit-mask)
    * @return A smart-pointer to the newly allocated Texture.
    */
-  static FrameBufferPtr New( unsigned int width, unsigned int height, Format format );
+  static FrameBufferPtr New( Dali::Integration::RenderSurface& renderSurface, Mask attachments );
+
+  /**
+   * A reference counted object may only be deleted by calling Unreference()
+   */
+  virtual ~FrameBuffer();
 
   /**
    * @brief Get the FrameBuffer render object
@@ -64,48 +84,76 @@ public:
   /**
    * @copydoc Dali::FrameBuffer::AttachColorTexture()
    */
-  void AttachColorTexture( NewTexturePtr texture, unsigned int mipmapLevel, unsigned int layer );
+  void AttachColorTexture( TexturePtr texture, uint32_t mipmapLevel, uint32_t layer );
 
   /**
    * @copydoc Dali::FrameBuffer::GetColorTexture()
    */
-  NewTexture* GetColorTexture();
+  Texture* GetColorTexture();
+
+  /**
+   * @brief Sets the frame buffer size.
+   * @param[in] width The width size
+   * @param[in] height The height size
+   */
+  void SetSize( uint32_t width, uint32_t height );
+
+  /**
+   * @brief Sets the background color
+   * @param[in] color The new background color
+   */
+  void SetBackgroundColor( const Vector4& color );
+
+  /**
+   * @brief Mark the render surface as invalid
+   *
+   * The render surface is maked as invalid when it is deleted.
+   *
+   * @note Only for FrameBuffer backed by a render surface.
+   * @return True if the FrameBuffer is backed by a render surface
+   */
+  void MarkSurfaceAsInvalid();
+
+  /**
+   * @brief Sets whether partial update is required for partial update
+   * @param[in] value whether partial update or not
+   */
+  void SetPartialUpdateEnabled( bool value );
 
 private: // implementation
 
   /**
    * Constructor
-   * @param[in] width The width of the FrameBuffer
-   * @param[in] height The height of the FrameBuffer
-   * @param[in] format The format of the FrameBuffer
+   * @param[in] width       The width of the FrameBuffer
+   * @param[in] height      The height of the FrameBuffer
+   * @param[in] attachments The attachments comprising the format of the FrameBuffer (bit-mask)
    */
-  FrameBuffer( unsigned int width, unsigned int height, Format format );
+  FrameBuffer( uint32_t width, uint32_t height, Mask attachments );
 
   /**
    * Second stage initialization of the Texture
    */
-  void Initialize();
+  void Initialize( Integration::RenderSurface* renderSurface = nullptr );
 
 protected:
 
-  /**
-   * A reference counted object may only be deleted by calling Unreference()
-   */
-  virtual ~FrameBuffer();
-
 private: // unimplemented methods
-  FrameBuffer( const FrameBuffer& );
-  FrameBuffer& operator=( const FrameBuffer& );
+
+  FrameBuffer() = delete;
+  FrameBuffer( const FrameBuffer& ) = delete;
+  FrameBuffer& operator=( const FrameBuffer& ) = delete;
 
 private: // data
 
-  Internal::EventThreadServices& mEventThreadServices;    ///<Used to send messages to the render thread via update thread
-  Internal::Render::FrameBuffer* mRenderObject;            ///<The Render::Texture associated to this texture
+  Internal::EventThreadServices& mEventThreadServices; ///< Used to send messages to the render thread via update thread
+  Internal::Render::FrameBuffer* mRenderObject;        ///< The Render::Texture associated to this texture
+
+  TexturePtr mColor;
+  uint32_t mWidth;
+  uint32_t mHeight;
+  Mask mAttachments;                           ///< Bit-mask of type FrameBuffer::Attachment::Mask
 
-  NewTexturePtr mColor;
-  unsigned int mWidth;
-  unsigned int mHeight;
-  Format mFormat;
+  bool mIsSurfaceBacked:1;
 
 };