mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
[Impeller] fixed subpass filter coverage with image filters (flutter/engine#46431)
fixes: https://github.com/flutter/flutter/issues/135777 fixes: https://github.com/flutter/flutter/issues/135766 fixes: https://github.com/flutter/flutter/issues/135212 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide] and the [C++, Objective-C, Java style guides]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I added new tests to check the change I am making or feature I am adding, or the PR is [test-exempt]. See [testing the engine] for instructions on writing and running engine tests. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I signed the [CLA]. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/wiki/Tree-hygiene#overview [Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene [test-exempt]: https://github.com/flutter/flutter/wiki/Tree-hygiene#tests [Flutter Style Guide]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo [C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style [testing the engine]: https://github.com/flutter/flutter/wiki/Testing-the-engine [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/wiki/Chat
This commit is contained in:
parent
af107ceba5
commit
b674ebe6db
@ -3590,6 +3590,25 @@ TEST_P(AiksTest, ClearBlend) {
|
||||
clear.blend_mode = BlendMode::kClear;
|
||||
|
||||
canvas.DrawCircle(Point::MakeXY(300.0, 300.0), 200.0, clear);
|
||||
}
|
||||
|
||||
TEST_P(AiksTest, MatrixImageFilterMagnify) {
|
||||
Canvas canvas;
|
||||
canvas.Scale(GetContentScale());
|
||||
auto image = std::make_shared<Image>(CreateTextureForFixture("airplane.jpg"));
|
||||
canvas.Translate({600, -200});
|
||||
canvas.SaveLayer({
|
||||
.image_filter = std::make_shared<MatrixImageFilter>(
|
||||
Matrix{
|
||||
2, 0, 0, 0, //
|
||||
0, 2, 0, 0, //
|
||||
0, 0, 2, 0, //
|
||||
0, 0, 0, 1 //
|
||||
},
|
||||
SamplerDescriptor{}),
|
||||
});
|
||||
canvas.DrawImage(image, {0, 0}, Paint{.color = Color(1.0, 1.0, 1.0, 0.5)});
|
||||
canvas.Restore();
|
||||
|
||||
ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture()));
|
||||
}
|
||||
|
||||
@ -202,8 +202,8 @@ std::optional<Rect> EntityPass::GetSubpassCoverage(
|
||||
// has deviated too much from the parent pass to safely intersect with the
|
||||
// pass coverage limit.
|
||||
coverage_limit =
|
||||
(image_filter && image_filter->IsTranslationOnly() ? std::nullopt
|
||||
: coverage_limit);
|
||||
(image_filter && !image_filter->IsTranslationOnly() ? std::nullopt
|
||||
: coverage_limit);
|
||||
|
||||
auto entities_coverage = subpass.GetElementsCoverage(coverage_limit);
|
||||
// The entities don't cover anything. There is nothing to do.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user