#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
{
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
/**
* @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;
};