// 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 "flutter/fml/closure.h" #include "flutter/fml/macros.h" #include "flutter/shell/platform/embedder/embedder.h" #include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/core/SkSurface.h" 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 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] render_surface The surface for this 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, sk_sp render_surface, fml::closure on_release); //---------------------------------------------------------------------------- /// @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. /// ~EmbedderRenderTarget(); //---------------------------------------------------------------------------- /// @brief A render surface the rasterizer can use to draw into the /// backing store of this render target. /// /// @return The render surface. /// sk_sp GetRenderSurface(); //---------------------------------------------------------------------------- /// @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; private: FlutterBackingStore backing_store_; sk_sp render_surface_; fml::closure on_release_; FML_DISALLOW_COPY_AND_ASSIGN(EmbedderRenderTarget); }; } // namespace flutter #endif // FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_H_