| Flutter Impeller |

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
5 #include "impeller/display_list/dl_image_impeller.h"
6
7 #include "impeller/aiks/aiks_context.h"
8 #include "impeller/entity/contents/filters/filter_contents.h"
9
10 namespace impeller {
11
12 sk_sp<DlImageImpeller> DlImageImpeller::Make(std::shared_ptr<Texture> texture,
13 OwningContext owning_context) {
14 if (!texture) {
15 return nullptr;
16 }
17 return sk_sp<DlImageImpeller>(
18 new DlImageImpeller(std::move(texture), owning_context));
19 }
20
21 sk_sp<DlImageImpeller> DlImageImpeller::MakeFromYUVTextures(
22 AiksContext* aiks_context,
23 std::shared_ptr<Texture> y_texture,
24 std::shared_ptr<Texture> uv_texture,
25 YUVColorSpace yuv_color_space) {
26 if (!aiks_context || !y_texture || !uv_texture) {
27 return nullptr;
28 }
29 auto yuv_to_rgb_filter_contents = FilterContents::MakeYUVToRGBFilter(
30 std::move(y_texture), std::move(uv_texture), yuv_color_space);
31 impeller::Entity entity;
32 entity.SetBlendMode(impeller::BlendMode::kSource);
33 auto snapshot = yuv_to_rgb_filter_contents->RenderToSnapshot(
34 aiks_context->GetContentContext(), // renderer
35 entity, // entity
36 std::nullopt, // coverage_limit
37 std::nullopt, // sampler_descriptor
38 true, // msaa_enabled
39 /*mip_count=*/1,
40 "MakeYUVToRGBFilter Snapshot"); // label
41 if (!snapshot.has_value()) {
42 return nullptr;
43 }
44 return impeller::DlImageImpeller::Make(snapshot->texture);
45 }
46
47 DlImageImpeller::DlImageImpeller(std::shared_ptr<Texture> texture,
48 OwningContext owning_context)
49 : texture_(std::move(texture)), owning_context_(owning_context) {}
50
51 // |DlImage|
52 DlImageImpeller::~DlImageImpeller() = default;
53
54 // |DlImage|
55 sk_sp<SkImage> DlImageImpeller::skia_image() const {
56 return nullptr;
57 };
58
59 // |DlImage|
60 std::shared_ptr<impeller::Texture> DlImageImpeller::impeller_texture() const {
61 return texture_;
62 }
63
64 // |DlImage|
65 bool DlImageImpeller::isOpaque() const {
66 // Impeller doesn't currently implement opaque alpha types.
67 return false;
68 }
69
70 // |DlImage|
71 bool DlImageImpeller::isTextureBacked() const {
72 // Impeller textures are always ... textures :/
73 return true;
74 }
75
76 // |DlImage|
77 bool DlImageImpeller::isUIThreadSafe() const {
78 // Impeller textures are always thread-safe
79 return true;
80 }
81
82 // |DlImage|
83 SkISize DlImageImpeller::dimensions() const {
84 const auto size = texture_ ? texture_->GetSize() : ISize{};
85 return SkISize::Make(size.width, size.height);
86 }
87
88 // |DlImage|
89 size_t DlImageImpeller::GetApproximateByteSize() const {
90 auto size = sizeof(*this);
91 if (texture_) {
92 size += texture_->GetTextureDescriptor().GetByteSizeOfBaseMipLevel();
93 }
94 return size;
95 }
96
97 } // namespace impeller
impeller::AiksContext
Definition: aiks_context.h:20
impeller::Entity::SetBlendMode
void SetBlendMode(BlendMode blend_mode)
Definition: entity.cc:130
impeller::AiksContext::GetContentContext
ContentContext & GetContentContext() const
Definition: aiks_context.cc:44
impeller::BlendMode::kSource
@ kSource
aiks_context.h
impeller::DlImageImpeller::MakeFromYUVTextures
static sk_sp< DlImageImpeller > MakeFromYUVTextures(AiksContext *aiks_context, std::shared_ptr< Texture > y_texture, std::shared_ptr< Texture > uv_texture, YUVColorSpace yuv_color_space)
Definition: dl_image_impeller.cc:21
impeller::DlImageImpeller::isUIThreadSafe
bool isUIThreadSafe() const override
Definition: dl_image_impeller.cc:77
impeller::DlImageImpeller::dimensions
SkISize dimensions() const override
Definition: dl_image_impeller.cc:83
impeller::DlImageImpeller
Definition: dl_image_impeller.h:15
impeller::DlImageImpeller::Make
static sk_sp< DlImageImpeller > Make(std::shared_ptr< Texture > texture, OwningContext owning_context=OwningContext::kIO)
Definition: dl_image_impeller.cc:12
impeller::Entity
Definition: entity.h:21
impeller::TSize< int64_t >
filter_contents.h
impeller::DlImageImpeller::owning_context
OwningContext owning_context() const override
Definition: dl_image_impeller.h:52
impeller::DlImageImpeller::isOpaque
bool isOpaque() const override
Definition: dl_image_impeller.cc:65
impeller::DlImageImpeller::impeller_texture
std::shared_ptr< impeller::Texture > impeller_texture() const override
Definition: dl_image_impeller.cc:60
impeller::FilterContents::MakeYUVToRGBFilter
static std::shared_ptr< FilterContents > MakeYUVToRGBFilter(std::shared_ptr< Texture > y_texture, std::shared_ptr< Texture > uv_texture, YUVColorSpace yuv_color_space)
Definition: filter_contents.cc:106
impeller::DlImageImpeller::skia_image
sk_sp< SkImage > skia_image() const override
Definition: dl_image_impeller.cc:55
std
Definition: comparable.h:95
impeller::DlImageImpeller::isTextureBacked
bool isTextureBacked() const override
Definition: dl_image_impeller.cc:71
impeller::YUVColorSpace
YUVColorSpace
Definition: color.h:55
impeller::DlImageImpeller::~DlImageImpeller
~DlImageImpeller() override
impeller
Definition: aiks_blur_unittests.cc:20
impeller::DlImageImpeller::GetApproximateByteSize
size_t GetApproximateByteSize() const override
Definition: dl_image_impeller.cc:89
dl_image_impeller.h