07105bbcbe
In theory, a convex shape is still convex if transformed by an affine matrix. However, SkPath segments are specified using floats, and attributes like collinearity can break under some transforms due to finite precision. Computing convexity is non-trivial, so there is value in SkPath caching this calculation. Convexity is useful, as both the CPU and GPU backends can draw convex shapes faster than non-convex. To balance these two (fragile float math and value of caching convexity), this CL invalidates this cached state if the transform could change convexity. In the general case, it is assumed that convexity could change. Special cases where it is safe to keep the cached state after transform are: - identity transform - scale/translate transform if the path is known to be axis-aligned All other combinations invalidate the cached state, forcing it to be recomputed. "axis-aligned" means the segments in the path are all axis-aligned, horizontal or vertical (e.g. a rect or rrect) Bug: 899689 Change-Id: I1381273eaff61d6b7134ae94b4f251c69991081a Reviewed-on: https://skia-review.googlesource.com/c/173226 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Cary Clark <caryclark@google.com> |
||
---|---|---|
.. | ||
android | ||
atlastext | ||
c | ||
codec | ||
compute | ||
core | ||
effects | ||
fonts | ||
gpu | ||
image | ||
images | ||
lazy | ||
opts | ||
pathops | ||
ports | ||
sfnt | ||
shaders | ||
sksl | ||
svg | ||
utils | ||
xml | ||
xps |