Screenspace AA tessellated GPU path rendering.
authorsenorblanco <senorblanco@chromium.org>
Wed, 31 Aug 2016 17:36:19 +0000 (10:36 -0700)
committerCommit bot <commit-bot@chromium.org>
Wed, 31 Aug 2016 17:36:19 +0000 (10:36 -0700)
commitf57372daf0562a187c24d427366ac6d0cb980c9b
treec3e0009b1a5d4efff26b990b005984dddd6ac42e
parent19ff1035d3334ffa513c93edce04662bb5ead5bd
Screenspace AA tessellated GPU path rendering.

This is an approach to antialiased concave path rendering
on the GPU without using MSAA. It uses GrTessellator to
extract boundary contours from the given path, then
inflates by half a pixel in screen space each direction,
then renders the result with zero alpha on the outer
contour and one alpha on in the inner contour. This
requires two passes through the tessellation code: one
to extract the boundaries, then one to tessellate the
result.

This gives approximately a 3X improvement on the IE
chalkboard demo in non-MSAA mode, a 30-40% improvement
on MotionMark's "Fill Paths", and a ~3X improvement on
MotionMark's "canvas arcTo segments".

It works best for large, simple paths, so there's currently
a limit of 10 verbs in the onCanDrawPath() check. This
dovetails nicely with the distance field path renderer's
support for small, detailed (and cached) paths.

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1152733009

NOTRY=true

Review-Url: https://codereview.chromium.org/1152733009
src/gpu/GrDefaultGeoProcFactory.h
src/gpu/GrPathRendererChain.cpp
src/gpu/GrTessellator.cpp
src/gpu/GrTessellator.h
src/gpu/batches/GrTessellatingPathRenderer.cpp