* limitations under the License.
*/
+// EXTERNAL INCLUDES
+#include <atomic>
+
// INTERNAL INCLUDES
+#include <dali/internal/update/manager/update-manager.h>
#include <dali/internal/render/renderers/render-frame-buffer.h>
#include <dali/integration-api/render-surface.h>
*/
bool IsSurfaceBacked() override { return true; };
+ /**
+ * @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 );
+
+ /**
+ * @copydoc Dali::Internal::FrameBuffer::MarkSurfaceAsInvalid()
+ */
+ void MarkSurfaceAsInvalid() { mIsSurfaceInvalid = true; };
+
+ /**
+ * @brief Gets whether the render surface in this frame buffer is valid or not
+ * @note The render surface becomes invalid when it is deleted in the event thread
+ * @return Whether the render surface is valid or not
+ */
+ bool IsSurfaceValid() const;
+
public:
/**
Context* GetContext();
/**
- * @brief Gets whether the depth buffer is required
- * @return TRUE if the depth buffer is required
+ * @brief Makes the graphics context current
*/
- Integration::DepthBufferAvailable GetDepthBufferRequired();
-
- /**
- * @brief Gets whether the stencil buffer is required
- * @return TRUE if the stencil buffer is required
- */
- Integration::StencilBufferAvailable GetStencilBufferRequired();
+ void MakeContextCurrent();
/**
* @brief Gets the background color of the surface.
*/
Vector4 GetBackgroundColor();
+ /**
+ * @brief Sets currentframe damaged rects
+ * @param[in] Sets currentframe damaged rects
+ * @param[out] return merged rect
+ */
+ void SetDamagedRect( const Dali::DamagedRect& damagedRect, Dali::DamagedRect& mergedRect );
+
+ /**
+ * @brief Gets whether partial update is required for partial update
+ * @return whether partial update or not
+ */
+ bool IsPartialUpdateEnabled() const;
+
+ /**
+ * @brief Sets whether partial update is required for partial update
+ * @param[in] value whether partial update or not
+ */
+ void SetPartialUpdateEnabled( bool value );
+
private:
Integration::RenderSurface* mSurface; ///< The render surface
Context* mContext; ///< The context holding the GL state of rendering for the surface backed frame buffer
+
+ uint32_t mWidth;
+ uint32_t mHeight;
+ Vector4 mBackgroundColor;
+ bool mSizeChanged;
+ bool mBackgroundColorChanged;
+ std::atomic<bool> mIsSurfaceInvalid; ///< This is set only from the event thread and read only from the render thread
+ bool mPartialUpdateEnabled; ///< This value is whether partial update is required
};
+// Messages for FrameBuffer
+inline void SetFrameBufferSizeMessage( SceneGraph::UpdateManager& updateManager, SurfaceFrameBuffer* surfaceFrameBuffer, uint32_t width, uint32_t height )
+{
+ typedef MessageValue2< SurfaceFrameBuffer, uint32_t, uint32_t > LocalType;
+
+ // Reserve some memory inside the message queue
+ uint32_t* slot = updateManager.ReserveMessageSlot( sizeof( LocalType ) );
+
+ // Construct message in the message queue memory; note that delete should not be called on the return value
+ new (slot) LocalType( surfaceFrameBuffer, &SurfaceFrameBuffer::SetSize, width, height );
+}
+
+inline void SetFrameBufferBackgroundColorMessage( SceneGraph::UpdateManager& updateManager, SurfaceFrameBuffer* surfaceFrameBuffer, const Vector4& color )
+{
+ typedef MessageValue1< SurfaceFrameBuffer, Vector4 > LocalType;
+
+ // Reserve some memory inside the message queue
+ uint32_t* slot = updateManager.ReserveMessageSlot( sizeof( LocalType ) );
+
+ // Construct message in the message queue memory; note that delete should not be called on the return value
+ new (slot) LocalType( surfaceFrameBuffer, &SurfaceFrameBuffer::SetBackgroundColor, color );
+}
+
+inline void SetFrameBufferPartialUpdateMessage( SceneGraph::UpdateManager& updateManager, SurfaceFrameBuffer* surfaceFrameBuffer, bool value )
+{
+ typedef MessageValue1< SurfaceFrameBuffer, bool > LocalType;
+
+ // Reserve some memory inside the message queue
+ uint32_t* slot = updateManager.ReserveMessageSlot( sizeof( LocalType ) );
+
+ // Construct message in the message queue memory; note that delete should not be called on the return value
+ new (slot) LocalType( surfaceFrameBuffer, &SurfaceFrameBuffer::SetPartialUpdateEnabled, value );
+}
} // namespace Render