13#if IMPELLER_SUPPORTS_RENDERING
16#include "third_party/skia/include/core/SkImageInfo.h"
17#include "third_party/skia/include/core/SkSurface.h"
28 std::shared_ptr<flutter::Layer> rootLayer) {
29 auto scene = fml::MakeRefCounted<Scene>(std::move(rootLayer));
30 scene->AssociateWithDartWrapper(scene_handle);
33Scene::Scene(std::shared_ptr<flutter::Layer> rootLayer) {
34 layer_tree_root_layer_ = std::move(rootLayer);
40 return layer_tree_root_layer_ !=
nullptr;
44 layer_tree_root_layer_.reset();
50 Dart_Handle raw_image_handle) {
57 Scene::RasterizeToImage(
width,
height, raw_image_handle);
63 Dart_Handle raw_image_callback) {
76 std::unique_ptr<LayerTree> layer_tree,
80#if IMPELLER_SUPPORTS_RENDERING
83 std::move(snapshot_delegate),
84 std::move(raster_task_runner));
89 FML_LOG(FATAL) <<
"Impeller opt-out unavailable.";
92 const auto& frame_size = layer_tree->frame_size();
93 const SkImageInfo image_info =
94 SkImageInfo::Make(frame_size.width, frame_size.height,
95 kRGBA_8888_SkColorType, kPremul_SkAlphaType);
97 image_info, std::move(layer_tree), std::move(snapshot_delegate),
98 raster_task_runner, unref_queue);
102void Scene::RasterizeToImage(uint32_t
width,
104 Dart_Handle raw_image_handle) {
109 auto unref_queue = dart_state->GetSkiaUnrefQueue();
110 auto snapshot_delegate = dart_state->GetSnapshotDelegate();
111 auto raster_task_runner = dart_state->GetTaskRunners().GetRasterTaskRunner();
115 dart_state->IsImpellerEnabled(), BuildLayerTree(
width,
height),
116 std::move(snapshot_delegate), std::move(raster_task_runner), unref_queue);
117 image->set_image(dl_image);
118 image->AssociateWithDartWrapper(raw_image_handle);
126std::unique_ptr<LayerTree> Scene::BuildLayerTree(uint32_t
width,
131 return std::make_unique<LayerTree>(layer_tree_root_layer_,
static fml::RefPtr< CanvasImage > Create()
static sk_sp< DlDeferredImageGPUImpeller > Make(std::unique_ptr< LayerTree > layer_tree, fml::TaskRunnerAffineWeakPtr< SnapshotDelegate > snapshot_delegate, fml::RefPtr< fml::TaskRunner > raster_task_runner)
static sk_sp< DlDeferredImageGPUSkia > MakeFromLayerTree(const SkImageInfo &image_info, std::unique_ptr< LayerTree > layer_tree, fml::TaskRunnerAffineWeakPtr< SnapshotDelegate > snapshot_delegate, const fml::RefPtr< fml::TaskRunner > &raster_task_runner, fml::RefPtr< SkiaUnrefQueue > unref_queue)
static Dart_Handle RasterizeLayerTreeToImage(std::unique_ptr< LayerTree > layer_tree, Dart_Handle raw_image_callback)
std::unique_ptr< flutter::LayerTree > takeLayerTree(uint64_t width, uint64_t height)
Dart_Handle toImage(uint32_t width, uint32_t height, Dart_Handle raw_image_handle)
static void create(Dart_Handle scene_handle, std::shared_ptr< flutter::Layer > rootLayer)
Dart_Handle toImageSync(uint32_t width, uint32_t height, Dart_Handle raw_image_handle)
static UIDartState * Current()
#define IMPLEMENT_WRAPPERTYPEINFO(LibraryName, ClassName)
FlutterVulkanImage * image
#define FML_LOG(severity)
impeller::ISize32 DlISize
static sk_sp< DlImage > CreateDeferredImage(bool impeller, std::unique_ptr< LayerTree > layer_tree, fml::TaskRunnerAffineWeakPtr< SnapshotDelegate > snapshot_delegate, fml::RefPtr< fml::TaskRunner > raster_task_runner, const fml::RefPtr< SkiaUnrefQueue > &unref_queue)
Dart_Handle ToDart(const T &object)
#define TRACE_EVENT0(category_group, name)