gaaclarke c089837469
Fixes RuntimeEffect when used with ImageFilter.compose and gaussian blur (#177687)
fixes https://github.com/flutter/flutter/issues/170820
fixes https://github.com/flutter/flutter/issues/177611

This PR snapshots the input of a runtimeeffect if its transform is not
identity. This fixes the cases where we use compose with the runtime
effect and the inner effect evaluates to a snapshot that doesn't match
the size of x, such as`runtime_effect(blur(x))`. Blur will perform at
lower resolutions when the sigma is high as an optimization. Blur also
adds a halo around what it is blurring. Previously we could optimize
away this extra render pass when we assumed that the coverage of
inner(x) was the same as x (but potentially just translated), but we
can't do that in practice because of things like gaussian blur.

In order to make this PR work we had to come up with a way to disable
the extra padding that is added to every `RenderToSnapshot`. This is
because users want to to reference specific fragments. The extra border
of padding would increase the texture size of inner(x) and x which
created a jump in the locations calcuated in the fragment shaders when
the inner snapshot's transform would jump from identity to non-identity.
The only other alternative would be to pass in the offset to the
fragment shader but that would be a breaking change.

In order to get the shaders rendering in the right orientation on
opengles I had to switch the shaders to do a `uv.y = 1.0 - uv.y`. This
is in the documentation for ImageFilter.shader but it is an annoying
gotcha. Hopefully this doesn't break someone if the logic was different
previously for ImageFilter.compose but this is the correct thing to do
and since it wasn't tested, there is no breaking change.

## 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], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
2025-10-30 21:39:11 +00:00
..
2025-10-09 19:44:25 +00:00

Flutter Engine

Setting up the Engine development environment

See here