Go to file
Michael Ludwig f8f23b2030 Draw image filters directly under non-axis-aligned transforms
This removes hacking the canvas CTM and wrapping the paint's image
filter in a special MatrixTransform that computed a post-transform
instead of its documented pre-transform effect. Performance-wise, the
computed layer sizes should be about the same, but we avoid one less
render target switch because we apply the transformation while drawing
to the dst device, vs. transforming into another temporary layer and
then drawing that to the dst device.

Several important changes in behavior here:
1. The DeviceCM record no longer has a stashed matrix to restore and
   holds its restoration paint directly.
2. Devices for image filter inputs can now have device-to-global
   transforms that are not integer translates.
3. The MatrixTransform hack punted when there was perspective because it
   could produce excessively large temporary images, but the new version
   appears to work around that. We now impose a maximum layer size to
   protect against that and automatically scale the layer to prevent it.
   Perspective image filters otherwise now draw correctly.
6. Updated layer sizing code to use the new image filter APIs
7. Updated backdrop filter and restore filters to go through the same
   code paths, although restore filters skip the intermediate image
   transform.
    - layer bounds and transforms now go through the updated skif API
      and is hopefully more straight forward to understand.
8. Now we can optimize root color filter nodes of a filter DAG, even if
   the entire DAG can't be represented as a color filter. The last node
   is pulled off and composed with the restoration paint instead.

Bug: skia:9074,skia:9283
Change-Id: I1fa1d50135b9d6d453b02f89aa3cc3b54deab678
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/328376
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
2020-11-05 20:46:15 +00:00
animations first cut at a checkbox 2009-10-21 19:41:10 +00:00
bazel bazel baby steps 2020-09-14 15:18:32 +00:00
bench Revert "Additional SkSL benches" 2020-11-05 20:11:46 +00:00
bin bin/try: automatically set 'git cl issue' when not found 2020-06-25 17:44:01 +00:00
build/fuchsia [fuchsia] Fix fidlc command. 2020-06-10 03:29:24 +00:00
build_overrides Port to ANGLE's GN files 2020-09-11 15:22:34 +00:00
client_utils/android Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
demos.skia.org [canvaskit] Remove Sk from nearly all function/type names. 2020-10-07 21:01:32 +00:00
dm [svg] Add support for preserveAspectRatio 2020-10-21 22:10:33 +00:00
docker [canvaskit,pathkit] Update to emsdk 2.0 2020-08-20 14:55:50 +00:00
docs/examples Only expose isConvex on path publicly. 2020-08-28 16:56:29 +00:00
example Reland "Remove use of legacy display globals." 2020-10-05 19:13:58 +00:00
experimental Add a method to search for the command that shades a pixel. 2020-11-05 19:44:22 +00:00
fuzz Move GrShaderCaps from Program::Settings to Compiler 2020-11-04 19:38:33 +00:00
gm Migrate work from constructors to onOnceBeforeDraw. 2020-11-05 15:43:42 +00:00
gn allow overriding {target,host}_link = ... in GN 2020-11-05 19:40:47 +00:00
include Draw image filters directly under non-axis-aligned transforms 2020-11-05 20:46:15 +00:00
infra [canvaskit] Add unit tests to wasm_gm_tests 2020-11-02 16:51:23 +00:00
modules [svg] Minor parser tweaks 2020-11-05 17:12:06 +00:00
platform_tools force drawFrame when new surface is created 2020-10-31 00:26:31 +00:00
resources [skottie] Black & White effect 2020-10-27 17:03:40 +00:00
samplecode Runtime Effects: Support 'uniform shader' (vs. 'in shader') 2020-11-04 22:29:53 +00:00
site Runtime Effects: Support 'uniform shader' (vs. 'in shader') 2020-11-04 22:29:53 +00:00
specs Fix CanvasKit generated documentation to work with emscripten 1.39.16. 2020-05-27 12:23:32 +00:00
src Draw image filters directly under non-axis-aligned transforms 2020-11-05 20:46:15 +00:00
tests Make ManagedBackendTexture fail on invalid GrBackendTexture 2020-11-05 20:21:14 +00:00
third_party update build for Apple Silicon 2020-11-02 20:06:09 +00:00
tools Make ManagedBackendTexture fail on invalid GrBackendTexture 2020-11-05 20:21:14 +00:00
.bazelignore bazel baby steps 2020-09-14 15:18:32 +00:00
.clang-format Disable BinPackParameters in .clang-format 2020-03-27 14:32:40 +00:00
.clang-tidy Disable ClangTidy namespace comments for short blocks. 2020-08-24 14:01:22 +00:00
.gitignore bazel baby steps 2020-09-14 15:18:32 +00:00
.gn Basic standalone GN configs. 2016-07-21 12:25:45 -07:00
AUTHORS Fix GrCCPerFlushResources error caused by cache eviction 2020-10-14 17:24:41 +00:00
BUILD.bazel bazel baby steps 2020-09-14 15:18:32 +00:00
BUILD.gn Reland "Replace pooling mechanism with GrMemoryPool." 2020-10-29 15:19:13 +00:00
codereview.settings Make uploading to Gerrit the default for Skia 2016-11-09 19:07:56 +00:00
CONTRIBUTING Fix references to https://sites.google.com/site/skiadocs/. 2015-02-03 13:12:54 -02:00
CQ_COMMITTERS Moved committer list to chrome-infra-auth and deleted it from the repo 2015-09-02 13:37:54 -07:00
DEPS Roll ANGLE from 6372a56f3a15 to 1e494cae8d48 (7 revisions) 2020-11-05 04:55:35 +00:00
go.mod Update Go Deps 2020-11-02 12:13:02 +00:00
go.sum Update Go Deps 2020-11-02 12:13:02 +00:00
LICENSE LICENSE file: clean up 2019-11-22 21:59:03 +00:00
OWNERS add OWNERS file 2017-12-01 19:50:19 +00:00
PRESUBMIT.py Generate SkSL golden output files from test inputs during the build. 2020-09-14 14:54:12 +00:00
public.bzl [svg] Post-relocation cleanup 2020-10-18 19:29:38 +00:00
README Fix references to https://sites.google.com/site/skiadocs/. 2015-02-03 13:12:54 -02:00
README.chromium Update README.chromium. 2015-06-11 13:19:24 -07:00
RELEASE_NOTES.txt Draw image filters directly under non-axis-aligned transforms 2020-11-05 20:46:15 +00:00
whitespace.txt Whitespace change to re-trigger Mac/iOS tests 2020-02-23 20:55:01 +00:00
WORKSPACE.bazel bazel baby steps 2020-09-14 15:18:32 +00:00

Skia is a complete 2D graphic library for drawing Text, Geometries, and Images.

See full details, and build instructions, at https://skia.org.