| // 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_ |