Go to file
Michael Ludwig 9f73b04b43 Fix use of fLastMoveToIndex in computeConvexity
Convexity is determined with a two pass algorithm, first by a sign
measure and then by a winding measure. Convexity also is meant to not be
affected by leading moveTos (other than the last leading moveTo before
real verbs) and not affected by trailing moveTos (since no additional
contour has actually started).

The old code would incorrectly reduce pointCount when the last moveTo
index was greater than 0, so the BySign pass was skipped or calculated
on an incomplete set of points. When a path (as the one added in this
CL's new test) is convex by winding but not by sign, it would be
incorrectly identified as convex. This led to further cascading issues
during rasterization.

However, the old code also had the effect of correctly ignoring any
last trailing moveTo from being included in the BySign test. Without
the new loop decrementing pointCount, trailing moveTo locations
would incorrectly create concave paths (and would in fact be concave
if the verb was anything other than a move).

I also realized that if the last moveTo index is not at the end of the
initial leading block, or at the end of the path entirely, then it
means the path must have multiple contours, at which point the path
cannot be convex, so we take the early out.

TBR: reed@google.com, bsalomon@google.com

Bug: skia:1220754
Change-Id: I9bd38f2eaaa3dbee135c190ade46fce0bd20257a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/420238
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
2021-06-22 00:34:28 +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 "Don't keep "outResultsFile" open in nanobench" 2021-06-19 22:12:48 +00:00
bin [infra] Fix fetch-sk and fetch-skps 2021-06-18 15:20:38 +00:00
build/fuchsia [fuchsia] Fix fidlc command. 2020-06-10 03:29:24 +00:00
build_overrides Fix ANGLE roll 2021-05-10 15:34:52 +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] Fix demo image link 2021-06-03 12:57:50 +00:00
dm Convert dmsaa to an SkSurfaceProp 2021-04-20 16:24:56 +00:00
docker [infra] Fix index.d.ts copy in Wasm Docker build 2021-02-23 15:54:11 +00:00
docs/examples Remove SkPaint::getHash 2021-06-17 14:59:23 +00:00
example Remove SDL from DEPS (and SDL example that used it) 2021-05-27 21:37:57 +00:00
experimental Reland "Purge ccpr" 2021-06-19 18:42:38 +00:00
fuzz Removed SkSL::StringFragment in favor of string_view 2021-06-10 16:08:13 +00:00
gm Verify that most runtime color filters support filtering a single color 2021-06-21 20:14:07 +00:00
gn Replace GrDeviceSpaceEffect with a runtime FP 2021-06-21 19:31:06 +00:00
include Verify that most runtime color filters support filtering a single color 2021-06-21 20:14:07 +00:00
infra Reland "Purge ccpr" 2021-06-19 18:42:38 +00:00
modules Reland "Purge ccpr" 2021-06-19 18:42:38 +00:00
platform_tools [androidkit] Add linear gradient 2021-06-17 20:55:53 +00:00
resources Remove SkBlendMode from SkSL 2021-06-16 21:01:30 +00:00
samplecode Reland "Purge ccpr" 2021-06-19 18:42:38 +00:00
site Fix typo in link 2021-06-17 20:55:05 +00:00
specs Fix CanvasKit generated documentation to work with emscripten 1.39.16. 2020-05-27 12:23:32 +00:00
src Fix use of fLastMoveToIndex in computeConvexity 2021-06-22 00:34:28 +00:00
tests Fix use of fLastMoveToIndex in computeConvexity 2021-06-22 00:34:28 +00:00
third_party Build HarfBuzz without ICU support 2021-06-17 15:44:13 +00:00
tools Reland "Purge ccpr" 2021-06-19 18:42:38 +00:00
.bazelignore bazel baby steps 2020-09-14 15:18:32 +00:00
.clang-format no more bin packing in .clang-format 2021-03-04 17:22:50 +00:00
.clang-tidy Disable ClangTidy namespace comments for short blocks. 2020-08-24 14:01:22 +00:00
.gitignore [infra] Add bin/fetch-sk 2021-05-24 17:42:17 +00:00
.gn Pre-emptive fix for upcoming ANGLE change. 2021-01-08 17:23:52 +00:00
AUTHORS Add UWP support 2021-02-10 19:04:42 +00:00
BUILD.bazel bazel baby steps 2020-09-14 15:18:32 +00:00
BUILD.gn Reland "Purge ccpr" 2021-06-19 18:42:38 +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 SwiftShader from cf2ffd05cbc9 to 4a304244dd86 (2 revisions) 2021-06-21 05:07:51 +00:00
DIR_METADATA Move metadata in OWNERS files to DIR_METADATA files 2021-02-02 23:41:54 +00:00
go.mod Revert "[infra] Roll Infra dep to update CIPD packages" 2021-06-04 19:39:19 +00:00
go.sum Revert "[infra] Roll Infra dep to update CIPD packages" 2021-06-04 19:39:19 +00:00
LICENSE LICENSE file: clean up 2019-11-22 21:59:03 +00:00
PRESUBMIT.py Remove mtklein from housekeeper message 2021-06-18 17:36:22 +00:00
public.bzl Reland "Purge ccpr" 2021-06-19 18:42: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 Enable reduceOpsTaskSplitting by default 2021-06-21 16:32:13 +00:00
whitespace.txt Test master branch deletion 2021-05-25 13:20:41 +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.