| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_H_ |
| #define FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_H_ |
| |
| #include <memory> |
| #include "flutter/fml/closure.h" |
| #include "flutter/fml/macros.h" |
| #include "flutter/shell/platform/embedder/embedder.h" |
| #include "third_party/skia/include/core/SkSize.h" |
| #include "third_party/skia/include/core/SkSurface.h" |
| |
| namespace impeller { |
| class RenderTarget; |
| class AiksContext; |
| } // namespace impeller |
| |
| namespace flutter { |
| |
| //------------------------------------------------------------------------------ |
| /// @brief Describes a surface whose backing store is managed by the |
| /// embedder. The type of surface depends on the client rendering |
| /// API used. The embedder is notified of the collection of this |
| /// render target via a callback. |
| /// |
| class EmbedderRenderTarget { |
| public: |
| //---------------------------------------------------------------------------- |
| /// @brief Destroys this instance of the render target and invokes the |
| /// callback for the embedder to release its resource associated |
| /// with the particular backing store. |
| /// |
| virtual ~EmbedderRenderTarget(); |
| |
| //---------------------------------------------------------------------------- |
| /// @brief A render surface the rasterizer can use to draw into the |
| /// backing store of this render target. |
| /// |
| /// @return The render surface. |
| /// |
| virtual sk_sp<SkSurface> GetSkiaSurface() const = 0; |
| |
| //---------------------------------------------------------------------------- |
| /// @brief An impeller render target the rasterizer can use to draw into |
| /// the backing store. |
| /// |
| /// @return The Impeller render target. |
| /// |
| virtual impeller::RenderTarget* GetImpellerRenderTarget() const = 0; |
| |
| //---------------------------------------------------------------------------- |
| /// @brief Returns the AiksContext that should be used for rendering, if |
| /// this render target is backed by Impeller. |
| /// |
| /// @return The Impeller Aiks context. |
| /// |
| virtual std::shared_ptr<impeller::AiksContext> GetAiksContext() const = 0; |
| |
| //---------------------------------------------------------------------------- |
| /// @brief Returns the size of the render target. |
| /// |
| /// @return The size of the render target. |
| /// |
| virtual SkISize GetRenderTargetSize() const = 0; |
| |
| //---------------------------------------------------------------------------- |
| /// @brief The embedder backing store descriptor. This is the descriptor |
| /// that was given to the engine by the embedder. This descriptor |
| /// may contain context the embedder can use to associate it |
| /// resources with the compositor layers when they are given back |
| /// to it in present callback. The engine does not use this in any |
| /// way. |
| /// |
| /// @return The backing store. |
| /// |
| const FlutterBackingStore* GetBackingStore() const; |
| |
| protected: |
| //---------------------------------------------------------------------------- |
| /// @brief Creates a render target whose backing store is managed by the |
| /// embedder. The way this render target is exposed to the engine |
| /// is via an SkSurface and a callback that is invoked by this |
| /// object in its destructor. |
| /// |
| /// @param[in] backing_store The backing store describing this render |
| /// target. |
| /// @param[in] on_release The callback to invoke (eventually forwarded |
| /// to the embedder) when the backing store is no |
| /// longer required by the engine. |
| /// |
| EmbedderRenderTarget(FlutterBackingStore backing_store, |
| fml::closure on_release); |
| |
| private: |
| FlutterBackingStore backing_store_; |
| |
| fml::closure on_release_; |
| |
| FML_DISALLOW_COPY_AND_ASSIGN(EmbedderRenderTarget); |
| }; |
| |
| } // namespace flutter |
| |
| #endif // FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_H_ |