20 const Rect& content_coverage,
21 const Matrix& effect_transform,
22 const Rect& coverage_limit,
23 const std::shared_ptr<FilterContents>& image_filter,
24 bool flood_output_coverage,
25 bool flood_input_coverage) {
26 Rect coverage = content_coverage;
47 if (flood_input_coverage) {
59 std::optional<Rect> source_coverage_limit =
60 image_filter->GetSourceCoverage(effect_transform, coverage_limit);
61 if (!source_coverage_limit.has_value()) {
70 if (flood_output_coverage || coverage.
IsMaximum()) {
71 return source_coverage_limit;
85 auto intersected_coverage =
86 transformed_coverage.
Intersection(source_coverage_limit.value());
87 if (intersected_coverage.has_value() &&
88 SizeDifferenceUnderThreshold(transformed_coverage.GetSize(),
89 intersected_coverage->GetSize(),
90 kDefaultSizeThreshold)) {
93 return transformed_coverage;
95 return intersected_coverage;
107 if (flood_output_coverage || coverage.
IsMaximum()) {
108 return coverage_limit;
114 std::optional<Rect> intersection =
116 if (!intersection.has_value()) {
121 Rect intersect_rect = intersection.value();
122 if (SizeDifferenceUnderThreshold(intersect_rect.
GetSize(),
124 kDefaultSizeThreshold)) {
125 return coverage_limit;
128 return intersect_rect;
std::optional< Rect > ComputeSaveLayerCoverage(const Rect &content_coverage, const Matrix &effect_transform, const Rect &coverage_limit, const std::shared_ptr< FilterContents > &image_filter, bool flood_output_coverage, bool flood_input_coverage)
Compute the coverage of a subpass in the global coordinate space.