skia2/samplecode
Michael Ludwig 66470f8b7d Pre-construct device-to-layer matrix for skif::Mappings
SkCanvas and SkDevice were using SkM44 and its definition of invert(),
but it was slightly more generous than SkMatrix::invert() so the fuzzer
caught a case where the layer's SkDevice had a valid transform but then
converting it to a SkMatrix in skif::Mapping was no longer invertible.

This modifies it so that skif::Mapping no longer tries to invert the
matrices. In almost all cases, the inverse of the layer-to-device
matrix can be constructed directly from a matrix multiply (that's what
device->getRelativeTransform() does). When the matrices are
ill-conditioned the constructed inverse may be inaccurate (hence why
SkMatrix::invert reports false), but in practice this happens for
ridiculously large transforms and the error isn't significant compared
to the precision range of the matrices anyways.

Other cases explicitly want to use the identity matrix for the layer
to device matrix, so I added a helper in the few places that would have
had to pass SkMatrix::I() twice instead.

The last case is drawImage() that creates its own skif::Mapping, now it
just calculates the inverse that skif::Mapping() would have done and if
it fails it drops the draw since it means the canvas matrix is bad.

Bug: chromium:1276525
Change-Id: Ib516bb2fac19d5e7397bd27d80f8e3932b25b2e2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/509396
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
2022-02-16 16:26:40 +00:00
..
DecodeFile.h Sample/Filter2View: make it work without /skimages 2019-07-08 17:05:23 +00:00
Sample2PtRadial.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
Sample3D.cpp Remove default/deprecated arguments to makeShader calls 2022-02-09 20:41:23 +00:00
Sample.cpp Almost remove GrContext 2020-10-20 15:52:01 +00:00
Sample.h add std::function option to Click to simplify callsites 2020-04-22 15:41:28 +00:00
SampleAARectModes.cpp Bitmap should use sampling options 2020-12-12 15:36:21 +00:00
SampleAARects.cpp Bitmap should use sampling options 2020-12-12 15:36:21 +00:00
SampleAndroidShadows.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleAnimatedImage.cpp Fix implicit fallthroughs throughout Skia. 2020-06-11 22:29:53 +00:00
SampleAnimatedText.cpp Reland "Add new virts, hide old ones" 2020-12-30 15:21:01 +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 Migrate to drawImage w/ sampling 2021-01-22 22:38:02 +00:00
SampleAudio.cpp Reland "Add format-specifier warnings to SkDebugf." 2021-06-25 17:57:43 +00:00
SampleCamera.cpp Simplify common case for recttorect 2021-01-15 18:37:46 +00:00
SampleChart.cpp Make class members that are static constexpr also be inline. 2021-10-11 16:22:59 +00:00
SampleChineseFling.cpp Make class members that are static constexpr also be inline. 2021-10-11 16:22:59 +00:00
SampleCircle.cpp Prepare to reenable unreachable-code warnings. 2022-02-04 21:45:39 +00:00
SampleClip.cpp Fix cases of variable shadowing in /samplecode/. 2021-08-11 13:40:50 +00:00
SampleClock.cpp Revert "Reland "Revert "Use flat version of path-direction enum""" 2019-11-22 19:09:54 +00:00
SampleComplexClip.cpp Use SkClipOp::kFoo instead of kFoo_SkClipOp from SkClipOpPriv 2021-08-03 18:08:21 +00:00
SampleCowboy.cpp Make class members that are static constexpr also be inline. 2021-10-11 16:22:59 +00:00
SampleCusp.cpp Prepare to reenable unreachable-code warnings. 2022-02-04 21:45:39 +00:00
SampleDegenerateQuads.cpp Move more classes to skgpu::v1 namespace 2021-09-16 14:04:16 +00:00
SampleDegenerateTwoPtRadials.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleEffects.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleEmboss.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleFatBits.cpp Use SkClipOp::kFoo instead of kFoo_SkClipOp from SkClipOpPriv 2021-08-03 18:08:21 +00:00
SampleFillType.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleFilterBounds.cpp Pre-construct device-to-layer matrix for skif::Mappings 2022-02-16 16:26:40 +00:00
SampleFitCubicToCircle.cpp Add an interactive sample that fits cubics to circular arcs 2020-06-09 23:04:03 +00:00
SampleFlutterAnimate.cpp Make class members that are static constexpr also be inline. 2021-10-11 16:22:59 +00:00
SampleGlyphTransform.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleGradients.cpp Prepare to reenable unreachable-code warnings. 2022-02-04 21:45:39 +00:00
SampleHairCurves.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleHairModes.cpp Bitmap should use sampling options 2020-12-12 15:36:21 +00:00
SampleImageFilterDAG.cpp Pre-construct device-to-layer matrix for skif::Mappings 2022-02-16 16:26:40 +00:00
SampleLayers.cpp Prepare to reenable unreachable-code warnings. 2022-02-04 21:45:39 +00:00
SampleLCD.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleManyRects.cpp Prepare to reenable unreachable-code warnings. 2022-02-04 21:45:39 +00:00
SampleMaterialShadows.cpp Reland "Fix directional shadows." 2021-07-16 16:49:52 +00:00
SampleMegaStroke.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleMixer.cpp Migrate to drawImage w/ sampling 2021-01-22 22:38:02 +00:00
SamplePatch.cpp Simplify common case of linear filtering with no mips 2021-01-15 16:47:16 +00:00
SamplePath.cpp Prepare to reenable unreachable-code warnings. 2022-02-04 21:45:39 +00:00
SamplePathClip.cpp Redraw duing mouse drag 2021-08-31 00:34:58 +00:00
SamplePathEffects.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SamplePathOverstroke.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SamplePathTessellators.cpp Track min required segments in PatchWriter 2022-02-08 16:30:26 +00:00
SamplePathText.cpp Fix when a glyph has a path 2021-12-07 14:58:29 +00:00
SamplePolyToPoly.cpp Fix cases of variable shadowing in /samplecode/. 2021-08-11 13:40:50 +00:00
SampleQuadStroker.cpp Pass sampling to surface.draw 2021-01-06 19:05:00 +00:00
SampleRectanizer.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleRepeatTile.cpp Bitmap should use sampling options 2020-12-12 15:36:21 +00:00
SampleSG.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleShadowColor.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleShadowReference.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleShadowUtils.cpp Fix cases of variable shadowing in /samplecode/. 2021-08-11 13:40:50 +00:00
SampleShip.cpp More hiding of legacy drawImage calls 2021-01-22 13:53:42 +00:00
SampleSimpleStroker.cpp Make class members that are static constexpr also be inline. 2021-10-11 16:22:59 +00:00
SampleSlides.cpp Simplify common case of linear filtering with no mips 2021-01-15 16:47:16 +00:00
SampleStringArt.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleStrokePath.cpp Prepare to reenable unreachable-code warnings. 2022-02-04 21:45:39 +00:00
SampleStrokeRect.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleStrokeVerb.cpp Reland "Purge ccpr" 2021-06-19 18:42:38 +00:00
SampleSVGFile.cpp Reland "Fix compilation w/ "skia_enable_svg = false" (take 2)" 2021-09-01 17:54:08 +00:00
SampleTextBox.cpp Add SkShaper::PurgeCaches. 2021-01-27 17:50:30 +00:00
SampleTextureUpload.cpp Make class members that are static constexpr also be inline. 2021-10-11 16:22:59 +00:00
SampleThinAA.cpp Make class members that are static constexpr also be inline. 2021-10-11 16:22:59 +00:00
SampleTiming.cpp Make class members that are static constexpr also be inline. 2021-10-11 16:22:59 +00:00
SampleVariableWidthStroker.cpp Make class members that are static constexpr also be inline. 2021-10-11 16:22:59 +00:00
SampleVertices.cpp Simplify common case of linear filtering with no mips 2021-01-15 16:47:16 +00:00
SampleWritePixels.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleXfer.cpp Simplify common case for recttorect 2021-01-15 18:37:46 +00:00
SampleXfermodesBlur.cpp Fix cases of variable shadowing in samplecode/. 2021-08-02 19:25:01 +00:00
vertexdump.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00