skia2/samplecode
Michael Ludwig 6d1c0d4196 Avoid use of SkMatrixImageFilter to handle CTM for backdrop filtering
The DrawDeviceWithFilter function used to rely on SkImageFilter's
applyCTMForBackdrop, which would create a new DAG and use an
SkMatrixImageFilter node to account for the transformation. However,
that filter is really meant to perform a transformation prior to the
CTM matrix. Abusing matrix math to instead have it map the backdrop
contents back into the CTM local space grossly inflated the size of the
temporary images needed when under many perspective transforms.

This CL instead takes over control of the CTM decomposition and draws
the backdrop (src) content into a temporary layer directly, and then
feeds that through the image filtering. The code is somewhat cumbersome
to follow because of the combination of coordinate spaces and need to
make everything relative to the top left corner of the images.

When the rest of my image filter refactor is more underway, I believe that
a lot of the coordinate space math and image origin accounting will
be much cleaner, but the overall backdrop filtering strategy would remain
similar to this new implementation.

Bug: skia:9074
Change-Id: Ibd2995e81d2b308c74b2d298da5e38daa74c8677
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/239108
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
2019-09-05 16:35:18 +00:00
..
DecodeFile.h Sample/Filter2View: make it work without /skimages 2019-07-08 17:05:23 +00:00
PerlinPatch.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
Sample2PtRadial.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
Sample.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
Sample.h tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleAAClip.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
SampleAAGeometry.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleAARectModes.cpp Samples: clean up cruft 2019-07-17 18:29:50 +00:00
SampleAARects.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
SampleAndroidShadows.cpp Samples: clean up cruft 2019-07-17 18:29:50 +00:00
SampleAnimatedImage.cpp Samples: clean up cruft 2019-07-17 18:29:50 +00:00
SampleAnimatedText.cpp Samples: clean up cruft 2019-07-17 18:29:50 +00:00
SampleAnimBlur.cpp Samples: clean up cruft 2019-07-17 18:29:50 +00:00
SampleArc.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
SampleAtlas.cpp tools: separate TimeUtils from AnimTimer 2019-07-12 15:05:01 +00:00
SampleBackdropBounds.cpp Avoid use of SkMatrixImageFilter to handle CTM for backdrop filtering 2019-09-05 16:35:18 +00:00
SampleBitmapRect.cpp Samples: clean up cruft 2019-07-17 18:29:50 +00:00
SampleCamera.cpp tools: separate TimeUtils from AnimTimer 2019-07-12 15:05:01 +00:00
SampleCCPRGeometry.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleChart.cpp Samples: clean up cruft 2019-07-17 18:29:50 +00:00
SampleChineseFling.cpp Samples: clean up cruft 2019-07-17 18:29:50 +00:00
SampleCircle.cpp Samples: clean up cruft 2019-07-17 18:29:50 +00:00
SampleClip.cpp Samples: clean up cruft 2019-07-17 18:29:50 +00:00
SampleClipDrawMatch.cpp Samples: clean up cruft 2019-07-17 18:29:50 +00:00
SampleClock.cpp Samples: clean up cruft 2019-07-17 18:29:50 +00:00
SampleColorFilter.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
SampleComplexClip.cpp Samples: clean up cruft 2019-07-17 18:29:50 +00:00
SampleCowboy.cpp Samples: clean up cruft 2019-07-17 18:29:50 +00:00
SampleCusp.cpp tools: separate TimeUtils from AnimTimer 2019-07-12 15:05:01 +00:00
SampleDegenerateQuads.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleDegenerateTwoPtRadials.cpp tools: separate TimeUtils from AnimTimer 2019-07-12 15:05:01 +00:00
SampleEffects.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleEmboss.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleFatBits.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleFillType.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleFilter2.cpp Sample/Filter2View: make it work without /skimages 2019-07-08 17:05:23 +00:00
SampleFilterQuality.cpp tools: separate TimeUtils from AnimTimer 2019-07-12 15:05:01 +00:00
SampleFlutterAnimate.cpp tools: separate TimeUtils from AnimTimer 2019-07-12 15:05:01 +00:00
SampleFontCache.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleGlyphTransform.cpp tools: separate TimeUtils from AnimTimer 2019-07-12 15:05:01 +00:00
SampleGradients.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
SampleHairCurves.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleHairline.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleHairModes.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleHT.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleIdentityScale.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleImageFilterDAG.cpp Move SkImageFilter functionality into private SkImageFilter_Base 2019-08-02 18:56:39 +00:00
SampleLayerMask.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
SampleLayers.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleLCD.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleLighting.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleLitAtlas.cpp tools: separate TimeUtils from AnimTimer 2019-07-12 15:05:01 +00:00
SampleLua.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleManyRects.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleMegaStroke.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
SampleMixer.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleParagraph.cpp Reshuffling bidi regions + empty text sizes + some font resolution bugs 2019-09-04 20:42:15 +00:00
SamplePatch.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SamplePath.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SamplePathClip.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SamplePathEffects.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
SamplePathOverstroke.cpp Samples: simplify Sample::Event 2019-07-08 19:09:42 +00:00
SamplePathText.cpp tools: separate TimeUtils from AnimTimer 2019-07-12 15:05:01 +00:00
SamplePolyToPoly.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleQuadStroker.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleRectanizer.cpp Samples: simplify Sample::Event 2019-07-08 19:09:42 +00:00
SampleRegion.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleRepeatTile.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleSG.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleShaders.cpp re-run tools/rewrite_includes.py 2019-07-25 15:40:33 +00:00
SampleShadowColor.cpp Samples: simplify Sample::Event 2019-07-08 19:09:42 +00:00
SampleShadowReference.cpp Samples: simplify Sample::Event 2019-07-08 19:09:42 +00:00
SampleShadowUtils.cpp tools: separate TimeUtils from AnimTimer 2019-07-12 15:05:01 +00:00
SampleShip.cpp Remove WallTimer class. 2019-07-15 16:06:11 +00:00
SampleSlides.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleStringArt.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleStrokePath.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleStrokeRect.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleSubpixelTranslate.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleSVGFile.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleTextBox.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleTextEffects.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleTextureDomain.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleTextureUpload.cpp Add adjustable max size for Metal dynamic allocation ring buffer. 2019-08-07 15:59:42 +00:00
SampleThinAA.cpp tools: separate TimeUtils from AnimTimer 2019-07-12 15:05:01 +00:00
SampleUnpremul.cpp remove code now that loopers are dead (w.r.t. canvas and paint) 2019-07-30 12:49:28 +00:00
SampleVertices.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleWritePixels.cpp Samples: add name() virtual 2019-07-03 17:41:16 +00:00
SampleXfer.cpp tools/skui: put all enums in a common namespace 2019-08-29 15:39:32 +00:00
SampleXfermodesBlur.cpp more rect api simplifications 2019-08-25 10:12:57 +00:00
vertexdump.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00