Flutter Engine
 
Loading...
Searching...
No Matches
dl_image_impeller.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
9
10namespace impeller {
11
12#if FML_OS_IOS_SIMULATOR
13sk_sp<DlImageImpeller> DlImageImpeller::Make(std::shared_ptr<Texture> texture,
14 OwningContext owning_context,
15 bool is_fake_image) {
16 if (!texture && !is_fake_image) {
17 return nullptr;
18 }
19 return sk_sp<DlImageImpeller>(
20 new DlImageImpeller(std::move(texture), owning_context, is_fake_image));
21}
22#else
23sk_sp<DlImageImpeller> DlImageImpeller::Make(std::shared_ptr<Texture> texture,
24 OwningContext owning_context) {
25 if (!texture) {
26 return nullptr;
27 }
28 return sk_sp<DlImageImpeller>(
29 new DlImageImpeller(std::move(texture), owning_context));
30}
31#endif // FML_OS_IOS_SIMULATOR
32
34 AiksContext* aiks_context,
35 std::shared_ptr<Texture> y_texture,
36 std::shared_ptr<Texture> uv_texture,
37 YUVColorSpace yuv_color_space) {
38 if (!aiks_context || !y_texture || !uv_texture) {
39 return nullptr;
40 }
41 auto yuv_to_rgb_filter_contents = FilterContents::MakeYUVToRGBFilter(
42 std::move(y_texture), std::move(uv_texture), yuv_color_space);
43 impeller::Entity entity;
45
46 // Disable the render target cache so that this snapshot's texture will not
47 // be reused later by other operations.
48 const auto& renderer = aiks_context->GetContentContext();
49 renderer.GetRenderTargetCache()->DisableCache();
50 fml::ScopedCleanupClosure restore_cache(
51 [&] { renderer.GetRenderTargetCache()->EnableCache(); });
52
53 std::optional<Snapshot> snapshot =
54 yuv_to_rgb_filter_contents->RenderToSnapshot(
55 renderer, entity,
56 {.coverage_limit = std::nullopt,
57 .sampler_descriptor = std::nullopt,
58 .msaa_enabled = true,
59 .mip_count = 1,
60 .label = "MakeYUVToRGBFilter Snapshot"});
61 if (!snapshot.has_value()) {
62 return nullptr;
63 }
64 return impeller::DlImageImpeller::Make(snapshot->texture);
65}
66
67DlImageImpeller::DlImageImpeller(std::shared_ptr<Texture> texture,
68 OwningContext owning_context
69#ifdef FML_OS_IOS_SIMULATOR
70 ,
71 bool is_fake_image
72#endif // FML_OS_IOS_SIMULATOR
73 )
74 : texture_(std::move(texture)),
75 owning_context_(owning_context)
76#ifdef FML_OS_IOS_SIMULATOR
77 ,
78 is_fake_image_(is_fake_image)
79#endif // #ifdef FML_OS_IOS_SIMULATOR
80{
81}
82
83// |DlImage|
85
86// |DlImage|
87sk_sp<SkImage> DlImageImpeller::skia_image() const {
88 return nullptr;
89};
90
91// |DlImage|
92std::shared_ptr<impeller::Texture> DlImageImpeller::impeller_texture() const {
93 return texture_;
94}
95
96// |DlImage|
98 // Impeller doesn't currently implement opaque alpha types.
99 return false;
100}
101
102// |DlImage|
104 // Impeller textures are always ... textures :/
105 return true;
106}
107
108// |DlImage|
110 // Impeller textures are always thread-safe
111 return true;
112}
113
114// |DlImage|
116 // texture |GetSize()| returns a 64-bit size, but we need a 32-bit size,
117 // so we need to convert to DlISize (the 32-bit variant) either way.
118 return texture_ ? flutter::DlISize(texture_->GetSize()) : flutter::DlISize();
119}
120
121// |DlImage|
123 auto size = sizeof(*this);
124 if (texture_) {
125 size += texture_->GetTextureDescriptor().GetByteSizeOfBaseMipLevel();
126 }
127 return size;
128}
129
130} // namespace impeller
Wraps a closure that is invoked in the destructor unless released by the caller.
Definition closure.h:32
ContentContext & GetContentContext() const
const std::shared_ptr< RenderTargetAllocator > & GetRenderTargetCache() const
size_t GetApproximateByteSize() const override
static sk_sp< DlImageImpeller > MakeFromYUVTextures(AiksContext *aiks_context, std::shared_ptr< Texture > y_texture, std::shared_ptr< Texture > uv_texture, YUVColorSpace yuv_color_space)
bool isTextureBacked() const override
std::shared_ptr< impeller::Texture > impeller_texture() const override
If this display list image is meant to be used by the Impeller backend, an Impeller texture instance....
static sk_sp< DlImageImpeller > Make(std::shared_ptr< Texture > texture, OwningContext owning_context=OwningContext::kIO)
flutter::DlISize GetSize() const override
sk_sp< SkImage > skia_image() const override
If this display list image is meant to be used by the Skia backend, an SkImage instance....
bool isUIThreadSafe() const override
If the underlying platform image held by this object has no threading requirements for the release of...
bool isOpaque() const override
If the pixel format of this image ignores alpha, this returns true. This method might conservatively ...
OwningContext owning_context() const override
void SetBlendMode(BlendMode blend_mode)
Definition entity.cc:97
static std::shared_ptr< FilterContents > MakeYUVToRGBFilter(std::shared_ptr< Texture > y_texture, std::shared_ptr< Texture > uv_texture, YUVColorSpace yuv_color_space)
FlTexture * texture
impeller::ISize32 DlISize
YUVColorSpace
Definition color.h:54
Definition ref_ptr.h:261