skia2/samplecode
Michael Ludwig 4e9d5e2bdf Use Wang's formula for quadratic and cubic point counts
- most of the small diffs are because I moved GrWangsFormula.h out
   of the tessellate/ directory and into the geometry/ directory since
   it's more general than HW tessellation.

The previous implementation was based on the heuristic that the distance
from the true curve to the line segment would be divided by 4 every time
the curve was recursively subdivided. This was a reasonable
approximation if the curve had balanced curvature on both sides of the
split. However, in the case of the new GM's curve, the left half was
already very linear and the right half had much higher curves.

This lead to the approximation reporting fewer points than required.
Theoretically, those few points that weren't utilized by the left half
of the curve could have been made available to the right half, but the
implementation of that would be tricky.

Instead, it now uses Wang's formula to compute the number of points.
Since recursive subdivision leads to linearly spaced samples assuming it
can't stop early, this point count represents a valid upper bound on
what's needed. It also then ensures both left and right halves of a
curve have the point counts they might need w/o updating the
generation implementations. However, since the recursive point
generation exits once each section has reached the error tolerance, in
scenarios where the prior approximation was reasonable, we'll end up
using fewer points than reported by Wang's. Hopefully that means there
is negligible performance regression since we won't be increasing
vertex counts by that much (except where needed for correctness).

Bug: skia:11886
Change-Id: Iba39dbe4de82011775524583efd461b10c9259fe
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/405197
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
2021-05-12 18:33:33 +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 Convert some SkRuntimeEffect::Make to use stage-specific factories 2021-04-21 16:19:57 +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 Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleCamera.cpp Simplify common case for recttorect 2021-01-15 18:37:46 +00:00
SampleChart.cpp Switch over to SkPathBuilder 2020-07-31 02:21:51 +00:00
SampleChineseFling.cpp Migrate to drawImage w/ sampling 2021-01-22 22:38:02 +00:00
SampleCircle.cpp Samples: clean up cruft 2019-07-17 18:29:50 +00:00
SampleClip.cpp Move Sk3Perspective and Sk3Lookat into SkM44 2021-03-24 15:47:22 +00:00
SampleClock.cpp Revert "Reland "Revert "Use flat version of path-direction enum""" 2019-11-22 19:09:54 +00:00
SampleComplexClip.cpp Update complex clip GMs to only use supported clip ops 2020-06-25 14:15:25 +00:00
SampleCowboy.cpp [svg] Allow clients to pass a custom SkFontMgr 2020-11-11 01:51:44 +00:00
SampleCusp.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleDegenerateQuads.cpp move SkTPin to include/private 2020-10-16 19:45:11 +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 Pass sampling to surface.draw 2021-01-06 19:05:00 +00:00
SampleFillType.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleFilterBounds.cpp Simplify common case of linear filtering with no mips 2021-01-15 16:47:16 +00:00
SampleFitCubicToCircle.cpp Add an interactive sample that fits cubics to circular arcs 2020-06-09 23:04:03 +00:00
SampleFlutterAnimate.cpp Starting to hide setFilterQuality 2020-12-19 20:56:50 +00:00
SampleGlyphTransform.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleGradients.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +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 Factor perspective scale into filter matrix decomposition 2020-10-16 18:49:51 +00:00
SampleLayers.cpp Removed unused SkInterpolator 2021-04-13 00:50:11 +00:00
SampleLCD.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleManyRects.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleMaterialShadows.cpp Add material shadows sample. 2020-12-17 22:33:26 +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 Show cubic made up of 2 quads 2020-10-23 21:03:45 +00:00
SamplePathClip.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +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
SamplePathText.cpp SkAuto[S]TMalloc only for trivially constructible/destructible. 2021-03-31 13:55:45 +00:00
SamplePolyToPoly.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +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 Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleShip.cpp More hiding of legacy drawImage calls 2021-01-22 13:53:42 +00:00
SampleSimpleStroker.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +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 Simplify common case for recttorect 2021-01-15 18:37:46 +00:00
SampleStrokeRect.cpp Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
SampleStrokeVerb.cpp Rename SampleCCPRGeometry.cpp -> SampleStrokeVerb.cpp 2021-03-08 16:37:09 +00:00
SampleSVGFile.cpp [svg] Allow clients to pass a custom SkFontMgr 2020-11-11 01:51:44 +00:00
SampleTessellatedWedge.cpp Use Wang's formula for quadratic and cubic point counts 2021-05-12 18:33:33 +00:00
SampleTextBox.cpp Add SkShaper::PurgeCaches. 2021-01-27 17:50:30 +00:00
SampleTextEffects.cpp Implement computeFastBounds for PathEffects 2021-05-11 17:01:59 +00:00
SampleTextureUpload.cpp Migrate to drawImage w/ sampling 2021-01-22 22:38:02 +00:00
SampleThinAA.cpp Reland "Add new virts, hide old ones" 2020-12-30 15:21:01 +00:00
SampleTiming.cpp Migrate to drawImage w/ sampling 2021-01-22 22:38:02 +00:00
SampleVariableWidthStroker.cpp Handle cubic segments in variable-width stroker 2020-10-30 15:10:30 +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 Use samplingoptions for bitmap shader 2020-12-12 17:08:11 +00:00
vertexdump.cpp rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00