diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index 360e4054a7fa1..2452782605994 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -1129,6 +1129,8 @@ ORIGIN: ../../../flutter/impeller/aiks/aiks_playground.cc + ../../../flutter/LIC ORIGIN: ../../../flutter/impeller/aiks/aiks_playground.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/aiks/canvas.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/aiks/canvas.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/aiks/color_filter_factory.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/aiks/color_filter_factory.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/aiks/image.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/aiks/image.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/aiks/paint.cc + ../../../flutter/LICENSE @@ -1225,6 +1227,10 @@ ORIGIN: ../../../flutter/impeller/compiler/types.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/compiler/types.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/compiler/utilities.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/compiler/utilities.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/display_list/conversion.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/display_list/conversion.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/display_list/display_list_color_filter.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/display_list/display_list_color_filter.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/display_list/display_list_dispatcher.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/display_list/display_list_dispatcher.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/display_list/display_list_image_impeller.cc + ../../../flutter/LICENSE @@ -3605,6 +3611,8 @@ FILE: ../../../flutter/impeller/aiks/aiks_playground.cc FILE: ../../../flutter/impeller/aiks/aiks_playground.h FILE: ../../../flutter/impeller/aiks/canvas.cc FILE: ../../../flutter/impeller/aiks/canvas.h +FILE: ../../../flutter/impeller/aiks/color_filter_factory.cc +FILE: ../../../flutter/impeller/aiks/color_filter_factory.h FILE: ../../../flutter/impeller/aiks/image.cc FILE: ../../../flutter/impeller/aiks/image.h FILE: ../../../flutter/impeller/aiks/paint.cc @@ -3701,6 +3709,10 @@ FILE: ../../../flutter/impeller/compiler/types.cc FILE: ../../../flutter/impeller/compiler/types.h FILE: ../../../flutter/impeller/compiler/utilities.cc FILE: ../../../flutter/impeller/compiler/utilities.h +FILE: ../../../flutter/impeller/display_list/conversion.cc +FILE: ../../../flutter/impeller/display_list/conversion.h +FILE: ../../../flutter/impeller/display_list/display_list_color_filter.cc +FILE: ../../../flutter/impeller/display_list/display_list_color_filter.h FILE: ../../../flutter/impeller/display_list/display_list_dispatcher.cc FILE: ../../../flutter/impeller/display_list/display_list_dispatcher.h FILE: ../../../flutter/impeller/display_list/display_list_image_impeller.cc diff --git a/impeller/aiks/BUILD.gn b/impeller/aiks/BUILD.gn index 744e1a9633c25..41f8407969e52 100644 --- a/impeller/aiks/BUILD.gn +++ b/impeller/aiks/BUILD.gn @@ -10,6 +10,8 @@ impeller_component("aiks") { "aiks_context.h", "canvas.cc", "canvas.h", + "color_filter_factory.cc", + "color_filter_factory.h", "image.cc", "image.h", "paint.cc", diff --git a/impeller/aiks/color_filter_factory.cc b/impeller/aiks/color_filter_factory.cc new file mode 100644 index 0000000000000..3d8f9c59a91b4 --- /dev/null +++ b/impeller/aiks/color_filter_factory.cc @@ -0,0 +1,11 @@ +// 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. + +#include "impeller/aiks/color_filter_factory.h" + +namespace impeller { + +ColorFilterFactory::~ColorFilterFactory() = default; + +} // namespace impeller diff --git a/impeller/aiks/color_filter_factory.h b/impeller/aiks/color_filter_factory.h new file mode 100644 index 0000000000000..b6296d9dbc742 --- /dev/null +++ b/impeller/aiks/color_filter_factory.h @@ -0,0 +1,30 @@ +// 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. + +#pragma once + +#include + +#include "impeller/entity/contents/filters/color_filter_contents.h" + +namespace impeller { + +class ColorFilterFactory { + public: + enum class ColorSourceType { + kBlend, + kMatrix, + kSrgbToLinearGamma, + kLinearToSrgbGamma, + }; + + virtual ~ColorFilterFactory(); + + virtual std::shared_ptr MakeContents( + FilterInput::Ref input) const = 0; + + virtual ColorSourceType GetType() const = 0; +}; + +} // namespace impeller diff --git a/impeller/aiks/paint.cc b/impeller/aiks/paint.cc index 04b93e248bea1..c0301e67f5745 100644 --- a/impeller/aiks/paint.cc +++ b/impeller/aiks/paint.cc @@ -85,8 +85,8 @@ std::shared_ptr Paint::WithColorFilter( std::shared_ptr input, bool absorb_opacity) const { if (color_filter.has_value()) { - const ColorFilterProc& filter = color_filter.value(); - auto color_filter_contents = filter(FilterInput::Make(input)); + auto filter = color_filter.value(); + auto color_filter_contents = filter->MakeContents(FilterInput::Make(input)); if (color_filter_contents) { color_filter_contents->SetAbsorbOpacity(absorb_opacity); } diff --git a/impeller/aiks/paint.h b/impeller/aiks/paint.h index 7db7b4223a49e..7e0a3597ea14c 100644 --- a/impeller/aiks/paint.h +++ b/impeller/aiks/paint.h @@ -7,6 +7,7 @@ #include #include "flutter/fml/macros.h" +#include "impeller/aiks/color_filter_factory.h" #include "impeller/entity/contents/contents.h" #include "impeller/entity/contents/filters/color_filter_contents.h" #include "impeller/entity/contents/filters/filter_contents.h" @@ -69,7 +70,7 @@ struct Paint { BlendMode blend_mode = BlendMode::kSourceOver; std::optional image_filter; - std::optional color_filter; + std::optional> color_filter; std::optional mask_blur_descriptor; /// @brief Wrap this paint's configured filters to the given contents. diff --git a/impeller/display_list/BUILD.gn b/impeller/display_list/BUILD.gn index 7b647a80929a0..ff224aad425da 100644 --- a/impeller/display_list/BUILD.gn +++ b/impeller/display_list/BUILD.gn @@ -6,6 +6,10 @@ import("//flutter/impeller/tools/impeller.gni") impeller_component("display_list") { sources = [ + "conversion.cc", + "conversion.h", + "display_list_color_filter.cc", + "display_list_color_filter.h", "display_list_dispatcher.cc", "display_list_dispatcher.h", "display_list_image_impeller.cc", diff --git a/impeller/display_list/conversion.cc b/impeller/display_list/conversion.cc new file mode 100644 index 0000000000000..d815f09c1b6a6 --- /dev/null +++ b/impeller/display_list/conversion.cc @@ -0,0 +1,95 @@ +// 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. + +#include "flutter/impeller/display_list/conversion.h" + +namespace impeller { + +BlendMode ToBlendMode(flutter::DlBlendMode mode) { + switch (mode) { + case flutter::DlBlendMode::kClear: + return BlendMode::kClear; + case flutter::DlBlendMode::kSrc: + return BlendMode::kSource; + case flutter::DlBlendMode::kDst: + return BlendMode::kDestination; + case flutter::DlBlendMode::kSrcOver: + return BlendMode::kSourceOver; + case flutter::DlBlendMode::kDstOver: + return BlendMode::kDestinationOver; + case flutter::DlBlendMode::kSrcIn: + return BlendMode::kSourceIn; + case flutter::DlBlendMode::kDstIn: + return BlendMode::kDestinationIn; + case flutter::DlBlendMode::kSrcOut: + return BlendMode::kSourceOut; + case flutter::DlBlendMode::kDstOut: + return BlendMode::kDestinationOut; + case flutter::DlBlendMode::kSrcATop: + return BlendMode::kSourceATop; + case flutter::DlBlendMode::kDstATop: + return BlendMode::kDestinationATop; + case flutter::DlBlendMode::kXor: + return BlendMode::kXor; + case flutter::DlBlendMode::kPlus: + return BlendMode::kPlus; + case flutter::DlBlendMode::kModulate: + return BlendMode::kModulate; + case flutter::DlBlendMode::kScreen: + return BlendMode::kScreen; + case flutter::DlBlendMode::kOverlay: + return BlendMode::kOverlay; + case flutter::DlBlendMode::kDarken: + return BlendMode::kDarken; + case flutter::DlBlendMode::kLighten: + return BlendMode::kLighten; + case flutter::DlBlendMode::kColorDodge: + return BlendMode::kColorDodge; + case flutter::DlBlendMode::kColorBurn: + return BlendMode::kColorBurn; + case flutter::DlBlendMode::kHardLight: + return BlendMode::kHardLight; + case flutter::DlBlendMode::kSoftLight: + return BlendMode::kSoftLight; + case flutter::DlBlendMode::kDifference: + return BlendMode::kDifference; + case flutter::DlBlendMode::kExclusion: + return BlendMode::kExclusion; + case flutter::DlBlendMode::kMultiply: + return BlendMode::kMultiply; + case flutter::DlBlendMode::kHue: + return BlendMode::kHue; + case flutter::DlBlendMode::kSaturation: + return BlendMode::kSaturation; + case flutter::DlBlendMode::kColor: + return BlendMode::kColor; + case flutter::DlBlendMode::kLuminosity: + return BlendMode::kLuminosity; + } + FML_UNREACHABLE(); +} + +Entity::TileMode ToTileMode(flutter::DlTileMode tile_mode) { + switch (tile_mode) { + case flutter::DlTileMode::kClamp: + return Entity::TileMode::kClamp; + case flutter::DlTileMode::kRepeat: + return Entity::TileMode::kRepeat; + case flutter::DlTileMode::kMirror: + return Entity::TileMode::kMirror; + case flutter::DlTileMode::kDecal: + return Entity::TileMode::kDecal; + } +} + +Color ToColor(const SkColor& color) { + return { + static_cast(SkColorGetR(color) / 255.0), // + static_cast(SkColorGetG(color) / 255.0), // + static_cast(SkColorGetB(color) / 255.0), // + static_cast(SkColorGetA(color) / 255.0) // + }; +} + +} // namespace impeller \ No newline at end of file diff --git a/impeller/display_list/conversion.h b/impeller/display_list/conversion.h new file mode 100644 index 0000000000000..598f7610cefe6 --- /dev/null +++ b/impeller/display_list/conversion.h @@ -0,0 +1,22 @@ +// 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. + +#pragma once + +#include "flutter/display_list/display_list_blend_mode.h" +#include "flutter/display_list/display_list_tile_mode.h" +#include "flutter/impeller/entity/entity.h" +#include "flutter/impeller/geometry/color.h" +#include "flutter/impeller/geometry/scalar.h" +#include "third_party/skia/include/core/SkColor.h" + +namespace impeller { + +BlendMode ToBlendMode(flutter::DlBlendMode mode); + +Entity::TileMode ToTileMode(flutter::DlTileMode tile_mode); + +Color ToColor(const SkColor& color); + +} // namespace impeller \ No newline at end of file diff --git a/impeller/display_list/display_list_color_filter.cc b/impeller/display_list/display_list_color_filter.cc new file mode 100644 index 0000000000000..e6eed3c85bb0c --- /dev/null +++ b/impeller/display_list/display_list_color_filter.cc @@ -0,0 +1,82 @@ +// 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. + +#include "impeller/display_list/display_list_color_filter.h" +#include "impeller/aiks/color_filter_factory.h" +#include "impeller/display_list/conversion.h" +#include "impeller/entity/contents/color_source_contents.h" + +namespace impeller { + +DlBlendColorFilterFactory::DlBlendColorFilterFactory( + const flutter::DlColorFilter* filter) + : filter_(filter->asBlend()) {} + +DlBlendColorFilterFactory::~DlBlendColorFilterFactory() {} + +ColorFilterFactory::ColorSourceType DlBlendColorFilterFactory::GetType() const { + return ColorFilterFactory::ColorSourceType::kBlend; +} + +std::shared_ptr DlBlendColorFilterFactory::MakeContents( + FilterInput::Ref input) const { + auto blend_mode = ToBlendMode(filter_->mode()); + auto color = ToColor(filter_->color()); + return ColorFilterContents::MakeBlend(blend_mode, {std::move(input)}, color); +} + +/// DlMatrixColorFilterFactory + +DlMatrixColorFilterFactory::DlMatrixColorFilterFactory( + const flutter::DlColorFilter* filter) + : filter_(filter->asMatrix()) {} + +DlMatrixColorFilterFactory::~DlMatrixColorFilterFactory() {} + +ColorFilterFactory::ColorSourceType DlMatrixColorFilterFactory::GetType() + const { + return ColorFilterFactory::ColorSourceType::kMatrix; +} + +std::shared_ptr DlMatrixColorFilterFactory::MakeContents( + FilterInput::Ref input) const { + const flutter::DlMatrixColorFilter* dl_matrix = filter_->asMatrix(); + impeller::FilterContents::ColorMatrix color_matrix; + dl_matrix->get_matrix(color_matrix.array); + return ColorFilterContents::MakeColorMatrix({std::move(input)}, color_matrix); +} + +/// DlSrgbToLinearColorFilterFactory + +DlSrgbToLinearColorFilterFactory::DlSrgbToLinearColorFilterFactory() {} + +DlSrgbToLinearColorFilterFactory::~DlSrgbToLinearColorFilterFactory() {} + +ColorFilterFactory::ColorSourceType DlSrgbToLinearColorFilterFactory::GetType() + const { + return ColorFilterFactory::ColorSourceType::kSrgbToLinearGamma; +} + +std::shared_ptr +DlSrgbToLinearColorFilterFactory::MakeContents(FilterInput::Ref input) const { + return ColorFilterContents::MakeSrgbToLinearFilter({std::move(input)}); +} + +/// DlLinearToSrgbColorFilterFactory + +DlLinearToSrgbColorFilterFactory::DlLinearToSrgbColorFilterFactory() {} + +DlLinearToSrgbColorFilterFactory::~DlLinearToSrgbColorFilterFactory() {} + +ColorFilterFactory::ColorSourceType DlLinearToSrgbColorFilterFactory::GetType() + const { + return ColorFilterFactory::ColorSourceType::kLinearToSrgbGamma; +} + +std::shared_ptr +DlLinearToSrgbColorFilterFactory::MakeContents(FilterInput::Ref input) const { + return ColorFilterContents::MakeLinearToSrgbFilter({std::move(input)}); +} + +} // namespace impeller diff --git a/impeller/display_list/display_list_color_filter.h b/impeller/display_list/display_list_color_filter.h new file mode 100644 index 0000000000000..200f867f8a543 --- /dev/null +++ b/impeller/display_list/display_list_color_filter.h @@ -0,0 +1,85 @@ +// 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. + +#pragma once + +#include "display_list/display_list_color_filter.h" +#include "impeller/aiks/color_filter_factory.h" +#include "impeller/entity/contents/color_source_contents.h" + +namespace impeller { + +//------------------------------------------------------------------------------ +/// DlColorFilterFactory +/// + +class DlBlendColorFilterFactory : public ColorFilterFactory { + public: + // |ColorFilterFactory| + ~DlBlendColorFilterFactory() override; + + explicit DlBlendColorFilterFactory(const flutter::DlColorFilter* filter); + + private: + // |ColorFilterFactory| + ColorSourceType GetType() const override; + + // |ColorFilterFactory| + std::shared_ptr MakeContents( + FilterInput::Ref input) const override; + + const flutter::DlBlendColorFilter* filter_; +}; + +class DlMatrixColorFilterFactory : public ColorFilterFactory { + public: + // |ColorFilterFactory| + ~DlMatrixColorFilterFactory() override; + + explicit DlMatrixColorFilterFactory(const flutter::DlColorFilter* filter); + + private: + // |ColorFilterFactory| + ColorSourceType GetType() const override; + + // |ColorFilterFactory| + std::shared_ptr MakeContents( + FilterInput::Ref input) const override; + + const flutter::DlMatrixColorFilter* filter_; +}; + +class DlSrgbToLinearColorFilterFactory : public ColorFilterFactory { + public: + // |ColorFilterFactory| + ~DlSrgbToLinearColorFilterFactory() override; + + explicit DlSrgbToLinearColorFilterFactory(); + + private: + // |ColorFilterFactory| + ColorSourceType GetType() const override; + + // |ColorFilterFactory| + std::shared_ptr MakeContents( + FilterInput::Ref input) const override; +}; + +class DlLinearToSrgbColorFilterFactory : public ColorFilterFactory { + public: + // |ColorFilterFactory| + ~DlLinearToSrgbColorFilterFactory() override; + + explicit DlLinearToSrgbColorFilterFactory(); + + private: + // |ColorFilterFactory| + ColorSourceType GetType() const override; + + // |ColorFilterFactory| + std::shared_ptr MakeContents( + FilterInput::Ref input) const override; +}; + +} // namespace impeller diff --git a/impeller/display_list/display_list_dispatcher.cc b/impeller/display_list/display_list_dispatcher.cc index 0bb93308accc1..520cd70055bca 100644 --- a/impeller/display_list/display_list_dispatcher.cc +++ b/impeller/display_list/display_list_dispatcher.cc @@ -19,6 +19,8 @@ #include "display_list/display_list_tile_mode.h" #include "flutter/fml/logging.h" #include "flutter/fml/trace_event.h" +#include "impeller/display_list/conversion.h" +#include "impeller/display_list/display_list_color_filter.h" #include "impeller/display_list/display_list_image_impeller.h" #include "impeller/display_list/display_list_vertices_geometry.h" #include "impeller/display_list/nine_patch_converter.h" @@ -50,83 +52,6 @@ DisplayListDispatcher::DisplayListDispatcher() = default; DisplayListDispatcher::~DisplayListDispatcher() = default; -static BlendMode ToBlendMode(flutter::DlBlendMode mode) { - switch (mode) { - case flutter::DlBlendMode::kClear: - return BlendMode::kClear; - case flutter::DlBlendMode::kSrc: - return BlendMode::kSource; - case flutter::DlBlendMode::kDst: - return BlendMode::kDestination; - case flutter::DlBlendMode::kSrcOver: - return BlendMode::kSourceOver; - case flutter::DlBlendMode::kDstOver: - return BlendMode::kDestinationOver; - case flutter::DlBlendMode::kSrcIn: - return BlendMode::kSourceIn; - case flutter::DlBlendMode::kDstIn: - return BlendMode::kDestinationIn; - case flutter::DlBlendMode::kSrcOut: - return BlendMode::kSourceOut; - case flutter::DlBlendMode::kDstOut: - return BlendMode::kDestinationOut; - case flutter::DlBlendMode::kSrcATop: - return BlendMode::kSourceATop; - case flutter::DlBlendMode::kDstATop: - return BlendMode::kDestinationATop; - case flutter::DlBlendMode::kXor: - return BlendMode::kXor; - case flutter::DlBlendMode::kPlus: - return BlendMode::kPlus; - case flutter::DlBlendMode::kModulate: - return BlendMode::kModulate; - case flutter::DlBlendMode::kScreen: - return BlendMode::kScreen; - case flutter::DlBlendMode::kOverlay: - return BlendMode::kOverlay; - case flutter::DlBlendMode::kDarken: - return BlendMode::kDarken; - case flutter::DlBlendMode::kLighten: - return BlendMode::kLighten; - case flutter::DlBlendMode::kColorDodge: - return BlendMode::kColorDodge; - case flutter::DlBlendMode::kColorBurn: - return BlendMode::kColorBurn; - case flutter::DlBlendMode::kHardLight: - return BlendMode::kHardLight; - case flutter::DlBlendMode::kSoftLight: - return BlendMode::kSoftLight; - case flutter::DlBlendMode::kDifference: - return BlendMode::kDifference; - case flutter::DlBlendMode::kExclusion: - return BlendMode::kExclusion; - case flutter::DlBlendMode::kMultiply: - return BlendMode::kMultiply; - case flutter::DlBlendMode::kHue: - return BlendMode::kHue; - case flutter::DlBlendMode::kSaturation: - return BlendMode::kSaturation; - case flutter::DlBlendMode::kColor: - return BlendMode::kColor; - case flutter::DlBlendMode::kLuminosity: - return BlendMode::kLuminosity; - } - FML_UNREACHABLE(); -} - -static Entity::TileMode ToTileMode(flutter::DlTileMode tile_mode) { - switch (tile_mode) { - case flutter::DlTileMode::kClamp: - return Entity::TileMode::kClamp; - case flutter::DlTileMode::kRepeat: - return Entity::TileMode::kRepeat; - case flutter::DlTileMode::kMirror: - return Entity::TileMode::kMirror; - case flutter::DlTileMode::kDecal: - return Entity::TileMode::kDecal; - } -} - static impeller::SamplerDescriptor ToSamplerDescriptor( const flutter::DlImageSampling options) { impeller::SamplerDescriptor desc; @@ -259,15 +184,6 @@ static Point ToPoint(const SkPoint& point) { return Point::MakeXY(point.fX, point.fY); } -static Color ToColor(const SkColor& color) { - return { - static_cast(SkColorGetR(color) / 255.0), // - static_cast(SkColorGetG(color) / 255.0), // - static_cast(SkColorGetB(color) / 255.0), // - static_cast(SkColorGetA(color) / 255.0) // - }; -} - static std::vector ToColors(const flutter::DlColor colors[], int count) { auto result = std::vector(); if (colors == nullptr) { @@ -530,38 +446,20 @@ void DisplayListDispatcher::setColorSource( } } -static std::optional ToColorFilterProc( +static std::optional> ToColorFilterProc( const flutter::DlColorFilter* filter) { if (filter == nullptr) { return std::nullopt; } switch (filter->type()) { - case flutter::DlColorFilterType::kBlend: { - auto dl_blend = filter->asBlend(); - auto blend_mode = ToBlendMode(dl_blend->mode()); - auto color = ToColor(dl_blend->color()); - return [blend_mode, color](FilterInput::Ref input) { - return ColorFilterContents::MakeBlend(blend_mode, {std::move(input)}, - color); - }; - } - case flutter::DlColorFilterType::kMatrix: { - const flutter::DlMatrixColorFilter* dl_matrix = filter->asMatrix(); - impeller::FilterContents::ColorMatrix color_matrix; - dl_matrix->get_matrix(color_matrix.array); - return [color_matrix](FilterInput::Ref input) { - return ColorFilterContents::MakeColorMatrix({std::move(input)}, - color_matrix); - }; - } + case flutter::DlColorFilterType::kBlend: + return std::make_shared(filter); + case flutter::DlColorFilterType::kMatrix: + return std::make_shared(filter); case flutter::DlColorFilterType::kSrgbToLinearGamma: - return [](FilterInput::Ref input) { - return ColorFilterContents::MakeSrgbToLinearFilter({std::move(input)}); - }; + return std::make_shared(); case flutter::DlColorFilterType::kLinearToSrgbGamma: - return [](FilterInput::Ref input) { - return ColorFilterContents::MakeLinearToSrgbFilter({std::move(input)}); - }; + return std::make_shared(); case flutter::DlColorFilterType::kUnknown: FML_LOG(ERROR) << "Requested DlColorFilterType::kUnknown"; UNIMPLEMENTED; @@ -732,7 +630,7 @@ static std::optional ToImageFilterProc( } return [color_filter = color_filter_proc.value()]( FilterInput::Ref input, const Matrix& effect_transform) { - return color_filter(std::move(input)); + return color_filter->MakeContents(std::move(input)); }; break; }