Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 34d3455

Browse files
committed
fixed coverage test and turned it back on
1 parent 3b5067b commit 34d3455

File tree

2 files changed

+48
-45
lines changed

2 files changed

+48
-45
lines changed

impeller/entity/contents/filters/gaussian_blur_filter_contents.cc

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -359,24 +359,28 @@ std::optional<Rect> GaussianBlurFilterContents::GetFilterCoverage(
359359
return {};
360360
}
361361

362-
std::optional<Rect> input_coverage = inputs[0]->GetCoverage(entity);
363-
if (!input_coverage.has_value()) {
362+
Entity snapshot_entity = entity.Clone();
363+
snapshot_entity.SetTransform(Matrix());
364+
std::optional<Rect> source_coverage = inputs[0]->GetCoverage(snapshot_entity);
365+
if (!source_coverage.has_value()) {
364366
return {};
365367
}
366368

367-
Vector2 entity_scale_x = entity.GetTransform().Basis() * Vector2(1.0, 0.0);
368-
Vector2 entity_scale_y = entity.GetTransform().Basis() * Vector2(0.0, 1.0);
369-
Vector2 scaled_sigma = (Matrix::MakeScale({entity_scale_x.GetLength(),
370-
entity_scale_y.GetLength(), 1.0}) *
369+
Vector2 scaled_sigma = (effect_transform.Basis() *
371370
Vector2(ScaleSigma(sigma_x_), ScaleSigma(sigma_y_)))
372371
.Abs();
373372
scaled_sigma.x = std::min(scaled_sigma.x, kMaxSigma);
374373
scaled_sigma.y = std::min(scaled_sigma.y, kMaxSigma);
375374
Vector2 blur_radius = Vector2(CalculateBlurRadius(scaled_sigma.x),
376375
CalculateBlurRadius(scaled_sigma.y));
377376
Vector2 padding(ceil(blur_radius.x), ceil(blur_radius.y));
378-
Vector2 local_padding = (entity.GetTransform().Basis() * padding).Abs();
379-
return input_coverage.value().Expand(Point(local_padding.x, local_padding.y));
377+
std::optional<Rect> expanded_source_coverage =
378+
source_coverage->Expand(Point(padding.x, padding.y));
379+
if (expanded_source_coverage.has_value()) {
380+
return expanded_source_coverage->TransformBounds(entity.GetTransform());
381+
}
382+
383+
return std::nullopt;
380384
}
381385

382386
std::optional<Entity> GaussianBlurFilterContents::RenderFilter(

impeller/entity/contents/filters/gaussian_blur_filter_contents_unittests.cc

Lines changed: 36 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -369,43 +369,42 @@ TEST_P(GaussianBlurFilterContentsTest, TextureContentsWithDestinationRect) {
369369
}
370370
}
371371

372-
// TEST_P(GaussianBlurFilterContentsTest,
373-
// TextureContentsWithDestinationRectScaled) {
374-
// std::shared_ptr<Texture> texture = MakeTexture(ISize(100, 100));
375-
// auto texture_contents = std::make_shared<TextureContents>();
376-
// texture_contents->SetSourceRect(Rect::MakeSize(texture->GetSize()));
377-
// texture_contents->SetTexture(texture);
378-
// texture_contents->SetDestinationRect(Rect::MakeXYWH(
379-
// 50, 40, texture->GetSize().width, texture->GetSize().height));
380-
381-
// fml::StatusOr<Scalar> sigma_radius_1 =
382-
// CalculateSigmaForBlurRadius(1.0, Matrix());
383-
// auto contents = std::make_unique<GaussianBlurFilterContents>(
384-
// sigma_radius_1.value(), sigma_radius_1.value(),
385-
// Entity::TileMode::kDecal, FilterContents::BlurStyle::kNormal,
386-
// /*mask_geometry=*/nullptr);
387-
// contents->SetInputs({FilterInput::Make(texture_contents)});
388-
// std::shared_ptr<ContentContext> renderer = GetContentContext();
389-
390-
// Entity entity;
391-
// entity.SetTransform(Matrix::MakeScale({2.0, 2.0, 1.0}));
392-
// std::optional<Entity> result =
393-
// contents->GetEntity(*renderer, entity, /*coverage_hint=*/{});
394-
// EXPECT_TRUE(result.has_value());
395-
// if (result.has_value()) {
396-
// EXPECT_EQ(result.value().GetBlendMode(), BlendMode::kSourceOver);
397-
// std::optional<Rect> result_coverage = result.value().GetCoverage();
398-
// std::optional<Rect> contents_coverage = contents->GetCoverage(entity);
399-
// EXPECT_TRUE(result_coverage.has_value());
400-
// EXPECT_TRUE(contents_coverage.has_value());
401-
// if (result_coverage.has_value() && contents_coverage.has_value()) {
402-
// EXPECT_TRUE(RectNear(result_coverage.value(),
403-
// contents_coverage.value()));
404-
// EXPECT_TRUE(RectNear(contents_coverage.value(),
405-
// Rect::MakeXYWH(94.f, 74.f, 212.f, 212.f)));
406-
// }
407-
// }
408-
// }
372+
TEST_P(GaussianBlurFilterContentsTest,
373+
TextureContentsWithDestinationRectScaled) {
374+
std::shared_ptr<Texture> texture = MakeTexture(ISize(100, 100));
375+
auto texture_contents = std::make_shared<TextureContents>();
376+
texture_contents->SetSourceRect(Rect::MakeSize(texture->GetSize()));
377+
texture_contents->SetTexture(texture);
378+
texture_contents->SetDestinationRect(Rect::MakeXYWH(
379+
50, 40, texture->GetSize().width, texture->GetSize().height));
380+
381+
fml::StatusOr<Scalar> sigma_radius_1 =
382+
CalculateSigmaForBlurRadius(1.0, Matrix());
383+
auto contents = std::make_unique<GaussianBlurFilterContents>(
384+
sigma_radius_1.value(), sigma_radius_1.value(), Entity::TileMode::kDecal,
385+
FilterContents::BlurStyle::kNormal,
386+
/*mask_geometry=*/nullptr);
387+
contents->SetInputs({FilterInput::Make(texture_contents)});
388+
std::shared_ptr<ContentContext> renderer = GetContentContext();
389+
390+
Entity entity;
391+
entity.SetTransform(Matrix::MakeScale({2.0, 2.0, 1.0}));
392+
std::optional<Entity> result =
393+
contents->GetEntity(*renderer, entity, /*coverage_hint=*/{});
394+
EXPECT_TRUE(result.has_value());
395+
if (result.has_value()) {
396+
EXPECT_EQ(result.value().GetBlendMode(), BlendMode::kSourceOver);
397+
std::optional<Rect> result_coverage = result.value().GetCoverage();
398+
std::optional<Rect> contents_coverage = contents->GetCoverage(entity);
399+
EXPECT_TRUE(result_coverage.has_value());
400+
EXPECT_TRUE(contents_coverage.has_value());
401+
if (result_coverage.has_value() && contents_coverage.has_value()) {
402+
EXPECT_TRUE(RectNear(result_coverage.value(), contents_coverage.value()));
403+
EXPECT_TRUE(RectNear(contents_coverage.value(),
404+
Rect::MakeXYWH(98.f, 78.f, 204.0f, 204.f)));
405+
}
406+
}
407+
}
409408

410409
TEST_P(GaussianBlurFilterContentsTest, TextureContentsWithEffectTransform) {
411410
Matrix effect_transform = Matrix::MakeScale({2.0, 2.0, 1.0});

0 commit comments

Comments
 (0)