From a6d9b3c866893d2b8d2b5d64fcb0dd15ad001f99 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Sun, 29 Jan 2023 23:09:43 -0800 Subject: [PATCH 1/8] [impeller] color filter type --- impeller/aiks/BUILD.gn | 2 + impeller/aiks/color_filter_factory.cc | 11 ++ impeller/aiks/color_filter_factory.h | 32 +++++ impeller/aiks/paint.cc | 4 +- impeller/aiks/paint.h | 3 +- impeller/display_list/BUILD.gn | 4 + impeller/display_list/conversion.cc | 95 ++++++++++++++ impeller/display_list/conversion.h | 22 ++++ .../display_list/display_list_color_filter.cc | 118 +++++++++++++++++ .../display_list/display_list_color_filter.h | 97 ++++++++++++++ .../display_list/display_list_dispatcher.cc | 122 ++---------------- impeller/entity/entity_pass.cc | 1 + 12 files changed, 396 insertions(+), 115 deletions(-) create mode 100644 impeller/aiks/color_filter_factory.cc create mode 100644 impeller/aiks/color_filter_factory.h create mode 100644 impeller/display_list/conversion.cc create mode 100644 impeller/display_list/conversion.h create mode 100644 impeller/display_list/display_list_color_filter.cc create mode 100644 impeller/display_list/display_list_color_filter.h diff --git a/impeller/aiks/BUILD.gn b/impeller/aiks/BUILD.gn index 744e1a9633c25..ff38282da11c2 100644 --- a/impeller/aiks/BUILD.gn +++ b/impeller/aiks/BUILD.gn @@ -6,6 +6,8 @@ import("../tools/impeller.gni") impeller_component("aiks") { sources = [ + "color_filter_factory.h", + "color_filter_factory.cc", "aiks_context.cc", "aiks_context.h", "canvas.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..4a0552a2323a8 --- /dev/null +++ b/impeller/aiks/color_filter_factory.h @@ -0,0 +1,32 @@ +// 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; + + virtual bool Equal(const ColorFilterFactory& other) const = 0; +}; + +} // namespace impeller \ No newline at end of file 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..32f8f1e14e6b8 100644 --- a/impeller/aiks/paint.h +++ b/impeller/aiks/paint.h @@ -16,6 +16,7 @@ #include "impeller/entity/entity.h" #include "impeller/entity/geometry.h" #include "impeller/geometry/color.h" +#include "impeller/aiks/color_filter_factory.h" namespace impeller { @@ -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..bcc73352bda10 100644 --- a/impeller/display_list/BUILD.gn +++ b/impeller/display_list/BUILD.gn @@ -6,6 +6,8 @@ import("//flutter/impeller/tools/impeller.gni") impeller_component("display_list") { sources = [ + "conversion.h", + "conversion.cc", "display_list_dispatcher.cc", "display_list_dispatcher.h", "display_list_image_impeller.cc", @@ -14,6 +16,8 @@ impeller_component("display_list") { "display_list_vertices_geometry.h", "nine_patch_converter.cc", "nine_patch_converter.h", + "display_list_color_filter.h", + "display_list_color_filter.cc", ] public_deps = [ 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..0222217406c0a --- /dev/null +++ b/impeller/display_list/display_list_color_filter.cc @@ -0,0 +1,118 @@ +// 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/fml/macros.h" + +#include "flutter/impeller/display_list/conversion.h" +#include "flutter/impeller/display_list/display_list_color_filter.h" +#include "impeller/aiks/color_filter_factory.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; +} + +bool DlBlendColorFilterFactory::Equal(const ColorFilterFactory& other) const { + if (other.GetType() != GetType()) { + return false; + } + auto other_typed = static_cast(other); + // Should euquality ignore the blend mode? + return filter_->color() == other_typed.filter_->color() && + filter_->mode() == other_typed.filter_->mode(); +} + +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; +} + +bool DlMatrixColorFilterFactory::Equal(const ColorFilterFactory& other) const { + if (other.GetType() != GetType()) { + return false; + } + + auto other_typed = static_cast(other); + for (auto i = 0u; i < 20; i++) { + if (other_typed.filter_[i] != filter_[i]) { + return false; + } + } + return true; +} + +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; +} + +bool DlSrgbToLinearColorFilterFactory::Equal( + const ColorFilterFactory& other) const { + return other.GetType() == GetType(); +} + +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; +} + +bool DlLinearToSrgbColorFilterFactory::Equal( + const ColorFilterFactory& other) const { + return other.GetType() == GetType(); +} + +std::shared_ptr +DlLinearToSrgbColorFilterFactory::MakeContents(FilterInput::Ref input) const { + return ColorFilterContents::MakeLinearToSrgbFilter({std::move(input)}); +} + +} // namespace impeller \ No newline at end of file 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..743c3f408a9f2 --- /dev/null +++ b/impeller/display_list/display_list_color_filter.h @@ -0,0 +1,97 @@ +// 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| + bool Equal(const ColorFilterFactory& other) 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| + bool Equal(const ColorFilterFactory& other) 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| + bool Equal(const ColorFilterFactory& other) 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| + bool Equal(const ColorFilterFactory& other) const override; + + // |ColorFilterFactory| + std::shared_ptr MakeContents( + FilterInput::Ref input) const override; +}; + +} // namespace impeller \ No newline at end of file diff --git a/impeller/display_list/display_list_dispatcher.cc b/impeller/display_list/display_list_dispatcher.cc index 937a987a158a7..7ecbcefdf7067 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/display_list_color_filter.h" +#include "impeller/display_list/conversion.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; } diff --git a/impeller/entity/entity_pass.cc b/impeller/entity/entity_pass.cc index 346e636eb763d..498204498c4eb 100644 --- a/impeller/entity/entity_pass.cc +++ b/impeller/entity/entity_pass.cc @@ -185,6 +185,7 @@ static RenderTarget CreateRenderTarget(ContentContext& renderer, bool EntityPass::Render(ContentContext& renderer, const RenderTarget& render_target) const { + // TODO RESET HERE? if (reads_from_pass_texture_ > 0) { auto offscreen_target = CreateRenderTarget(renderer, render_target.GetRenderTargetSize(), true); From 39bcaef36cae4caf7fa8649a314501dce2eddf1b Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Sun, 29 Jan 2023 23:10:09 -0800 Subject: [PATCH 2/8] ++ --- impeller/aiks/paint.h | 2 +- impeller/display_list/display_list_dispatcher.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/impeller/aiks/paint.h b/impeller/aiks/paint.h index 32f8f1e14e6b8..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" @@ -16,7 +17,6 @@ #include "impeller/entity/entity.h" #include "impeller/entity/geometry.h" #include "impeller/geometry/color.h" -#include "impeller/aiks/color_filter_factory.h" namespace impeller { diff --git a/impeller/display_list/display_list_dispatcher.cc b/impeller/display_list/display_list_dispatcher.cc index 7ecbcefdf7067..4b56de69cb0b5 100644 --- a/impeller/display_list/display_list_dispatcher.cc +++ b/impeller/display_list/display_list_dispatcher.cc @@ -19,8 +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/display_list_color_filter.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" From d3c69cd9974c997f505271ffc665ede95238589b Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Sun, 29 Jan 2023 23:10:43 -0800 Subject: [PATCH 3/8] ++ --- impeller/aiks/BUILD.gn | 4 ++-- impeller/display_list/BUILD.gn | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/impeller/aiks/BUILD.gn b/impeller/aiks/BUILD.gn index ff38282da11c2..41f8407969e52 100644 --- a/impeller/aiks/BUILD.gn +++ b/impeller/aiks/BUILD.gn @@ -6,12 +6,12 @@ import("../tools/impeller.gni") impeller_component("aiks") { sources = [ - "color_filter_factory.h", - "color_filter_factory.cc", "aiks_context.cc", "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/display_list/BUILD.gn b/impeller/display_list/BUILD.gn index bcc73352bda10..ff224aad425da 100644 --- a/impeller/display_list/BUILD.gn +++ b/impeller/display_list/BUILD.gn @@ -6,8 +6,10 @@ import("//flutter/impeller/tools/impeller.gni") impeller_component("display_list") { sources = [ - "conversion.h", "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", @@ -16,8 +18,6 @@ impeller_component("display_list") { "display_list_vertices_geometry.h", "nine_patch_converter.cc", "nine_patch_converter.h", - "display_list_color_filter.h", - "display_list_color_filter.cc", ] public_deps = [ From 1c71b4128e2d78e6dfe29a883998f36182ec3d36 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Mon, 30 Jan 2023 13:31:53 -0800 Subject: [PATCH 4/8] remove equal --- impeller/aiks/color_filter_factory.h | 2 -- .../display_list/display_list_color_filter.cc | 36 ------------------- .../display_list/display_list_color_filter.h | 12 ------- 3 files changed, 50 deletions(-) diff --git a/impeller/aiks/color_filter_factory.h b/impeller/aiks/color_filter_factory.h index 4a0552a2323a8..0e0a5807afb7a 100644 --- a/impeller/aiks/color_filter_factory.h +++ b/impeller/aiks/color_filter_factory.h @@ -25,8 +25,6 @@ class ColorFilterFactory { FilterInput::Ref input) const = 0; virtual ColorSourceType GetType() const = 0; - - virtual bool Equal(const ColorFilterFactory& other) const = 0; }; } // 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 index 0222217406c0a..778711ddc33e1 100644 --- a/impeller/display_list/display_list_color_filter.cc +++ b/impeller/display_list/display_list_color_filter.cc @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "flutter/fml/macros.h" - #include "flutter/impeller/display_list/conversion.h" #include "flutter/impeller/display_list/display_list_color_filter.h" #include "impeller/aiks/color_filter_factory.h" @@ -21,16 +19,6 @@ ColorFilterFactory::ColorSourceType DlBlendColorFilterFactory::GetType() const { return ColorFilterFactory::ColorSourceType::kBlend; } -bool DlBlendColorFilterFactory::Equal(const ColorFilterFactory& other) const { - if (other.GetType() != GetType()) { - return false; - } - auto other_typed = static_cast(other); - // Should euquality ignore the blend mode? - return filter_->color() == other_typed.filter_->color() && - filter_->mode() == other_typed.filter_->mode(); -} - std::shared_ptr DlBlendColorFilterFactory::MakeContents( FilterInput::Ref input) const { auto blend_mode = ToBlendMode(filter_->mode()); @@ -51,20 +39,6 @@ ColorFilterFactory::ColorSourceType DlMatrixColorFilterFactory::GetType() return ColorFilterFactory::ColorSourceType::kMatrix; } -bool DlMatrixColorFilterFactory::Equal(const ColorFilterFactory& other) const { - if (other.GetType() != GetType()) { - return false; - } - - auto other_typed = static_cast(other); - for (auto i = 0u; i < 20; i++) { - if (other_typed.filter_[i] != filter_[i]) { - return false; - } - } - return true; -} - std::shared_ptr DlMatrixColorFilterFactory::MakeContents( FilterInput::Ref input) const { const flutter::DlMatrixColorFilter* dl_matrix = filter_->asMatrix(); @@ -84,11 +58,6 @@ ColorFilterFactory::ColorSourceType DlSrgbToLinearColorFilterFactory::GetType() return ColorFilterFactory::ColorSourceType::kSrgbToLinearGamma; } -bool DlSrgbToLinearColorFilterFactory::Equal( - const ColorFilterFactory& other) const { - return other.GetType() == GetType(); -} - std::shared_ptr DlSrgbToLinearColorFilterFactory::MakeContents(FilterInput::Ref input) const { return ColorFilterContents::MakeSrgbToLinearFilter({std::move(input)}); @@ -105,11 +74,6 @@ ColorFilterFactory::ColorSourceType DlLinearToSrgbColorFilterFactory::GetType() return ColorFilterFactory::ColorSourceType::kLinearToSrgbGamma; } -bool DlLinearToSrgbColorFilterFactory::Equal( - const ColorFilterFactory& other) const { - return other.GetType() == GetType(); -} - std::shared_ptr DlLinearToSrgbColorFilterFactory::MakeContents(FilterInput::Ref input) const { return ColorFilterContents::MakeLinearToSrgbFilter({std::move(input)}); diff --git a/impeller/display_list/display_list_color_filter.h b/impeller/display_list/display_list_color_filter.h index 743c3f408a9f2..805d327432027 100644 --- a/impeller/display_list/display_list_color_filter.h +++ b/impeller/display_list/display_list_color_filter.h @@ -25,9 +25,6 @@ class DlBlendColorFilterFactory : public ColorFilterFactory { // |ColorFilterFactory| ColorSourceType GetType() const override; - // |ColorFilterFactory| - bool Equal(const ColorFilterFactory& other) const override; - // |ColorFilterFactory| std::shared_ptr MakeContents( FilterInput::Ref input) const override; @@ -46,9 +43,6 @@ class DlMatrixColorFilterFactory : public ColorFilterFactory { // |ColorFilterFactory| ColorSourceType GetType() const override; - // |ColorFilterFactory| - bool Equal(const ColorFilterFactory& other) const override; - // |ColorFilterFactory| std::shared_ptr MakeContents( FilterInput::Ref input) const override; @@ -67,9 +61,6 @@ class DlSrgbToLinearColorFilterFactory : public ColorFilterFactory { // |ColorFilterFactory| ColorSourceType GetType() const override; - // |ColorFilterFactory| - bool Equal(const ColorFilterFactory& other) const override; - // |ColorFilterFactory| std::shared_ptr MakeContents( FilterInput::Ref input) const override; @@ -86,9 +77,6 @@ class DlLinearToSrgbColorFilterFactory : public ColorFilterFactory { // |ColorFilterFactory| ColorSourceType GetType() const override; - // |ColorFilterFactory| - bool Equal(const ColorFilterFactory& other) const override; - // |ColorFilterFactory| std::shared_ptr MakeContents( FilterInput::Ref input) const override; From f29493939192636b2a9c345c73560c9e20d6710d Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Mon, 30 Jan 2023 13:32:20 -0800 Subject: [PATCH 5/8] ++ --- impeller/display_list/display_list_color_filter.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/impeller/display_list/display_list_color_filter.cc b/impeller/display_list/display_list_color_filter.cc index 778711ddc33e1..9859099fb765a 100644 --- a/impeller/display_list/display_list_color_filter.cc +++ b/impeller/display_list/display_list_color_filter.cc @@ -2,8 +2,8 @@ // 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" #include "flutter/impeller/display_list/display_list_color_filter.h" +#include "flutter/impeller/display_list/conversion.h" #include "impeller/aiks/color_filter_factory.h" #include "impeller/entity/contents/color_source_contents.h" From 57313bef394b99fc12557db3b4b9d51c978e09ea Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Mon, 30 Jan 2023 13:34:43 -0800 Subject: [PATCH 6/8] formatting --- impeller/aiks/color_filter_factory.h | 2 +- impeller/display_list/display_list_color_filter.cc | 6 +++--- impeller/display_list/display_list_color_filter.h | 2 +- impeller/entity/entity_pass.cc | 1 - 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/impeller/aiks/color_filter_factory.h b/impeller/aiks/color_filter_factory.h index 0e0a5807afb7a..b6296d9dbc742 100644 --- a/impeller/aiks/color_filter_factory.h +++ b/impeller/aiks/color_filter_factory.h @@ -27,4 +27,4 @@ class ColorFilterFactory { virtual ColorSourceType GetType() const = 0; }; -} // namespace impeller \ No newline at end of file +} // namespace impeller diff --git a/impeller/display_list/display_list_color_filter.cc b/impeller/display_list/display_list_color_filter.cc index 9859099fb765a..5dd60fcb6d51c 100644 --- a/impeller/display_list/display_list_color_filter.cc +++ b/impeller/display_list/display_list_color_filter.cc @@ -2,8 +2,8 @@ // 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/display_list_color_filter.h" -#include "flutter/impeller/display_list/conversion.h" +#include "impeller/display_list/display_list_color_filter.h" +#include "impeller/display_list/conversion.h" #include "impeller/aiks/color_filter_factory.h" #include "impeller/entity/contents/color_source_contents.h" @@ -79,4 +79,4 @@ DlLinearToSrgbColorFilterFactory::MakeContents(FilterInput::Ref input) const { return ColorFilterContents::MakeLinearToSrgbFilter({std::move(input)}); } -} // namespace impeller \ No newline at end of file +} // namespace impeller diff --git a/impeller/display_list/display_list_color_filter.h b/impeller/display_list/display_list_color_filter.h index 805d327432027..200f867f8a543 100644 --- a/impeller/display_list/display_list_color_filter.h +++ b/impeller/display_list/display_list_color_filter.h @@ -82,4 +82,4 @@ class DlLinearToSrgbColorFilterFactory : public ColorFilterFactory { FilterInput::Ref input) const override; }; -} // namespace impeller \ No newline at end of file +} // namespace impeller diff --git a/impeller/entity/entity_pass.cc b/impeller/entity/entity_pass.cc index 498204498c4eb..346e636eb763d 100644 --- a/impeller/entity/entity_pass.cc +++ b/impeller/entity/entity_pass.cc @@ -185,7 +185,6 @@ static RenderTarget CreateRenderTarget(ContentContext& renderer, bool EntityPass::Render(ContentContext& renderer, const RenderTarget& render_target) const { - // TODO RESET HERE? if (reads_from_pass_texture_ > 0) { auto offscreen_target = CreateRenderTarget(renderer, render_target.GetRenderTargetSize(), true); From ef497685aa64099a0989d3fcf0ceee75db340bbc Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Mon, 30 Jan 2023 13:37:13 -0800 Subject: [PATCH 7/8] ++ --- impeller/display_list/display_list_color_filter.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/impeller/display_list/display_list_color_filter.cc b/impeller/display_list/display_list_color_filter.cc index 5dd60fcb6d51c..e6eed3c85bb0c 100644 --- a/impeller/display_list/display_list_color_filter.cc +++ b/impeller/display_list/display_list_color_filter.cc @@ -3,8 +3,8 @@ // found in the LICENSE file. #include "impeller/display_list/display_list_color_filter.h" -#include "impeller/display_list/conversion.h" #include "impeller/aiks/color_filter_factory.h" +#include "impeller/display_list/conversion.h" #include "impeller/entity/contents/color_source_contents.h" namespace impeller { From 719a2c81afda07924c4fd1f4f60afd6f289cc30c Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Wed, 1 Feb 2023 12:27:20 -0800 Subject: [PATCH 8/8] ++ --- ci/licenses_golden/licenses_flutter | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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