Flutter Impeller
image_filter.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 
7 #include "flutter/display_list/effects/dl_image_filters.h"
8 #include "flutter/display_list/effects/dl_runtime_effect.h"
11 
12 namespace impeller::interop {
13 
14 ImageFilter::ImageFilter(std::shared_ptr<flutter::DlImageFilter> filter)
15  : filter_(std::move(filter)) {}
16 
17 ImageFilter::~ImageFilter() = default;
18 
20  Scalar y_sigma,
21  flutter::DlTileMode tile_mode) {
22  auto filter = flutter::DlBlurImageFilter::Make(x_sigma, y_sigma, tile_mode);
23  if (!filter) {
24  return nullptr;
25  }
26  return Create<ImageFilter>(std::move(filter));
27 }
28 
30  Scalar y_radius) {
31  auto filter = flutter::DlDilateImageFilter::Make(x_radius, y_radius);
32  if (!filter) {
33  return nullptr;
34  }
35  return Create<ImageFilter>(std::move(filter));
36 }
37 
39  Scalar y_radius) {
40  auto filter = flutter::DlErodeImageFilter::Make(x_radius, y_radius);
41  if (!filter) {
42  return nullptr;
43  }
44  return Create<ImageFilter>(std::move(filter));
45 }
46 
48  const Matrix& matrix,
49  flutter::DlImageSampling sampling) {
50  auto filter = flutter::DlMatrixImageFilter::Make(matrix, sampling);
51  if (!filter) {
52  return nullptr;
53  }
54  return Create<ImageFilter>(std::move(filter));
55 }
56 
58  const Context& context,
59  const FragmentProgram& program,
60  std::vector<std::shared_ptr<flutter::DlColorSource>> samplers,
61  std::shared_ptr<std::vector<uint8_t>> uniform_data) {
62  auto runtime_stage =
63  program.FindRuntimeStage(context.GetContext()->GetRuntimeStageBackend());
64  if (!runtime_stage) {
65  VALIDATION_LOG << "Could not find runtime stage for backend.";
66  return nullptr;
67  }
68  auto runtime_effect =
69  flutter::DlRuntimeEffectImpeller::Make(std::move(runtime_stage));
70  if (!runtime_effect) {
71  VALIDATION_LOG << "Could not make runtime effect.";
72  return nullptr;
73  }
74  auto filter =
75  flutter::DlRuntimeEffectImageFilter::Make(std::move(runtime_effect), //
76  std::move(samplers), //
77  std::move(uniform_data) //
78  );
79  if (!filter) {
80  VALIDATION_LOG << "Could not create runtime effect image filter.";
81  return nullptr;
82  }
83  return Create<ImageFilter>(std::move(filter));
84 }
85 
87  const ImageFilter& inner) {
88  auto filter = flutter::DlComposeImageFilter::Make(outer.GetImageFilter(),
89  inner.GetImageFilter());
90  if (!filter) {
91  return nullptr;
92  }
93  return Create<ImageFilter>(std::move(filter));
94 }
95 
96 const std::shared_ptr<flutter::DlImageFilter>& ImageFilter::GetImageFilter()
97  const {
98  return filter_;
99 }
100 
101 } // namespace impeller::interop
static sk_sp< DlRuntimeEffect > Make(std::shared_ptr< impeller::RuntimeStage > runtime_stage)
std::shared_ptr< impeller::Context > GetContext() const
Definition: context.cc:20
std::shared_ptr< RuntimeStage > FindRuntimeStage(RuntimeStageBackend backend) const
static ScopedObject< ImageFilter > MakeDilate(Scalar x_radius, Scalar y_radius)
Definition: image_filter.cc:29
ImageFilter(std::shared_ptr< flutter::DlImageFilter > filter)
Definition: image_filter.cc:14
static ScopedObject< ImageFilter > MakeFragmentProgram(const Context &context, const FragmentProgram &program, std::vector< std::shared_ptr< flutter::DlColorSource >> samplers, std::shared_ptr< std::vector< uint8_t >> uniform_data)
Definition: image_filter.cc:57
static ScopedObject< ImageFilter > MakeErode(Scalar x_radius, Scalar y_radius)
Definition: image_filter.cc:38
const std::shared_ptr< flutter::DlImageFilter > & GetImageFilter() const
Definition: image_filter.cc:96
static ScopedObject< ImageFilter > MakeCompose(const ImageFilter &outer, const ImageFilter &inner)
Definition: image_filter.cc:86
static ScopedObject< ImageFilter > MakeBlur(Scalar x_sigma, Scalar y_sigma, flutter::DlTileMode tile_mode)
Definition: image_filter.cc:19
static ScopedObject< ImageFilter > MakeMatrix(const Matrix &matrix, flutter::DlImageSampling sampling)
Definition: image_filter.cc:47
float Scalar
Definition: scalar.h:19
Definition: comparable.h:95
A 4x4 matrix using column-major storage.
Definition: matrix.h:37
#define VALIDATION_LOG
Definition: validation.h:91