daa9b8e4d9
The SkM44::RectToRect function matches the semantics of SkMatrix::RectToRect(kFill_ScaleToFit). No other ScaleToFit variants are ported over to SkM44. skottie uses some instances of kCenter_ScaleToFit so that functionality may need to be added in the future (in SkM44 or in skottie). There are no current usages of the kStart and kEnd_ScaleToFit semantics. The SkM44::mapRect() function is implemented to correspond to the SkMatrix::mapRect() that returns the mapped rect (instead of modifying a pointer) and always has ApplyPerspectiveClip::kYes. This was chosen to keep its behavior simple and because perspective clipping is almost always the right thing to do. In the new implementation there is no longer a performance cliff to worry about (see below). For the timebeing mapRect is hidden behind SkMatrixPriv::MapRect(). Performance: I added benchmarks for mapRect() on SkM44 and SkMatrix that use the same matrices to get a fair comparison on their different specializations. SkMatrix has a very efficient mapRect when it's scale+translate or simpler, then another impl. for affine matrices, and then falls back to SkPath clipping when there's perspective. On the other hand, SkM44 only has 2 modes: affine and perspective. On my desktop, with a Ryzen 9 3900X, here are the times for 100,000 calls to mapRect for different types of matrices: SkMatrix SkM44 scale+translate 0.35 ms 0.42 ms rotate 1.70 ms 0.42 ms perspective 63.90 ms 0.66 ms clipped-perspective 138.0 ms 0.96 ms To summarize, the SkM44::mapRect is almost as fast as the s+t specialization in SkMatrix, but for all non-perspective matrices. For perspective matrices it's only 2x slower than that specialization when no vertices are clipped, and still almost 2x faster than the affine specialization when vertices are clipped (and 100x faster than falling back to SkPath). Given that, there's the open question of whether or not keeping an affine specialization is worth it for SkM44's code size. Bug: skia:11720 Change-Id: I6771956729ed64f3b287a9de503513375c9f42a0 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/402957 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Mike Reed <reed@google.com> Auto-Submit: Michael Ludwig <michaelludwig@google.com> |
||
---|---|---|
animations | ||
bazel | ||
bench | ||
bin | ||
build/fuchsia | ||
build_overrides | ||
client_utils/android | ||
demos.skia.org | ||
dm | ||
docker | ||
docs/examples | ||
example | ||
experimental | ||
fuzz | ||
gm | ||
gn | ||
include | ||
infra | ||
modules | ||
platform_tools | ||
resources | ||
samplecode | ||
site | ||
specs | ||
src | ||
tests | ||
third_party | ||
tools | ||
.bazelignore | ||
.clang-format | ||
.clang-tidy | ||
.gitignore | ||
.gn | ||
AUTHORS | ||
BUILD.bazel | ||
BUILD.gn | ||
codereview.settings | ||
CONTRIBUTING | ||
CQ_COMMITTERS | ||
DEPS | ||
DIR_METADATA | ||
go.mod | ||
go.sum | ||
LICENSE | ||
PRESUBMIT.py | ||
public.bzl | ||
README | ||
README.chromium | ||
RELEASE_NOTES.txt | ||
whitespace.txt | ||
WORKSPACE.bazel |
Skia is a complete 2D graphic library for drawing Text, Geometries, and Images. See full details, and build instructions, at https://skia.org.