skia2/samplecode
Yuqian Li df60e369a8 New analytic AA scan converter using delta (I call it DAA for now)
DAA is:

1. Much simpler than AAA.
   SkScan_AAAPath.cpp is about 1700 lines.
   SkScan_DAAPath.cpp is about 300 lines.
   The whole DAA CL is only about 800 lines.

2. Much faster than AAA for complicated paths.
   The speedup applies to GL backend (including ccpr)!
   Here's the frame time of 'SampleApp --slide Chart' on macbook pro:
     AAA-raster: 33ms
     DAA-raster: 21ms
     AAA-gl:     30ms
     DAA-gl:     20ms
     AAA-ccpr:   18ms
     DAA-ccpr:   12ms
   My linux desktop doesn't have SSE3 so the speedup is smaller
   (~25% for Chart). I believe that DAA is so fast that I can enable
   it for any paths (AAA is not enabled by default for complicated
   paths because it is slow; hence our older supersampling scan
   converter is used for stroking on Chart for AAA-xxx config.)

3. The SkCoverageDelta is suitable for threaded backend with
   out-of-order concurrent scan conversion as commented in the source
   code. Maybe we can also just send deltas to GPU.

4. Similar to most analytic path renderers, the quality is on the best
   ground-truth level, unless there are intersections within a pixel.
   The intersections look good to my eyes although theoretically that
   could be arbitrary far from the ground truth (see my AAA slides).

5. For simple paths, such as circle, triangle, rrect, etc., DAA is
   slower than AAA. But DAA is faster than our older supersampling
   scan converter in most cases. As those simple paths usually don't
   constitute the bottleneck of a picture (skp or svg), I strongly
   recommend use DAA.

6. DAA also heavily favors blitMask so it may work quite well with
   SkRasterPipeline and SkRasterPipelineBlitter.

Finally, please check https://skia-review.googlesource.com/c/22420/
which accelerate DAA by specializing blitCoverageDeltas for
SkARGB32_Blitter and SkARGB32_Black_Blitter. It brings a little(<5%)
speedup. But I couldn't figure out how to reduce the duplicate code
so I don't intend to land it.

Bug: skia:
Change-Id: I3b7ed6a727447922e645b1acb737a506e7c09a4c
Reviewed-on: https://skia-review.googlesource.com/19666
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Cary Clark <caryclark@google.com>
Commit-Queue: Yuqian Li <liyuqian@google.com>
2017-07-25 21:55:19 +00:00
..
ClockFaceView.cpp delete some dead code in SampleApp 2017-05-31 20:59:39 +00:00
DecodeFile.h use unique_ptr for codec factories 2017-07-25 15:35:23 +00:00
GMSampleView.cpp move files out of private, and fix up callers to IWYU 2017-05-16 21:29:03 +00:00
GMSampleView.h Mark overridden destructors with 'override' and remove 'virtual' 2017-03-22 16:06:18 +00:00
OverView.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
OverView.h
PerlinPatch.cpp move perlinenoise2 into effects 2017-05-30 20:15:37 +00:00
Sample2PtRadial.cpp Style bikeshed - remove extraneous whitespace 2016-03-29 09:03:53 -07:00
SampleAAClip.cpp Style bikeshed - remove extraneous whitespace 2016-03-29 09:03:53 -07:00
SampleAAGeometry.cpp SkCanvas: Helpers for draw{Point,Line,Circle} 2017-05-16 12:59:11 +00:00
SampleAARectModes.cpp Use SkBlendMode_Name rather than one-off tables 2017-03-15 16:52:49 +00:00
SampleAARects.cpp Rein in the use of SkDevice.h 2016-04-20 05:29:51 -07:00
SampleAll.cpp delete some dead code in SampleApp 2017-05-31 20:59:39 +00:00
SampleAndroidShadows.cpp Add tonal color support for shadows. 2017-06-09 17:18:58 +00:00
SampleAnimatedText.cpp Revert "Revert "Reland: Remove SkLights include from SkCanvas.h"" 2017-05-03 19:17:11 +00:00
SampleAnimator.cpp SkFontData to use smart pointers. 2016-09-16 06:24:20 -07:00
SampleAnimBlur.cpp switch maskfilters to sk_sp 2016-04-04 10:02:58 -07:00
SampleApp.cpp New analytic AA scan converter using delta (I call it DAA for now) 2017-07-25 21:55:19 +00:00
SampleApp.h Revert "pass surface to device-manager" 2017-07-24 15:00:49 +00:00
SampleArc.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleAtlas.cpp remove xfermode from public api 2016-10-28 20:06:17 +00:00
SampleBigBlur.cpp switch maskfilters to sk_sp 2016-04-04 10:02:58 -07:00
SampleBigGradient.cpp impl clipping for GDI raster-handle 2017-01-12 20:21:39 +00:00
SampleBitmapRect.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleBlur.cpp remove unneeded code for index8 imagse 2017-07-03 19:07:25 +00:00
SampleCamera.cpp move setshader to sk_sp, re-using SK_SUPPORT_LEGACY_CREATESHADER_PTR 2016-03-25 09:08:00 -07:00
SampleCCPRGeometry.cpp Coverage counting path renderer 2017-07-14 21:45:35 +00:00
SampleChart.cpp hide trivial helpers on canvas 2017-02-22 19:41:04 +00:00
SampleCircle.cpp Factor code to rotate a canvas about a point. 2016-07-12 15:01:19 -07:00
SampleClamp.cpp Style bikeshed - remove extraneous whitespace 2016-03-29 09:03:53 -07:00
SampleClip.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleClipDrawMatch.cpp hide trivial helpers on canvas 2017-02-22 19:41:04 +00:00
SampleClock.cpp Add samples to Viewer. 2016-06-16 09:52:35 -07:00
SampleCode.cpp Misc batch->op cleanup Part 1 of 2 2016-12-21 16:45:40 +00:00
SampleCode.h Add samples to Viewer. 2016-06-16 09:52:35 -07:00
SampleColorFilter.cpp remove xfermode from public api 2016-10-28 20:06:17 +00:00
SampleComplexClip.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleConcavePaths.cpp Revert "Revert "make it illegal to include SkXfermode.h"" 2016-11-23 22:17:17 +00:00
SampleDash.cpp Style bikeshed - remove extraneous whitespace 2016-03-29 09:03:53 -07:00
SampleDegenerateTwoPtRadials.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleDither.cpp Revert "Revert "Delete copyTo(Allocator), hide copyTo() behind flag"" 2017-04-28 15:49:04 +00:00
SampleEffects.cpp hide emboss from everyone (except android for now) 2016-12-07 19:13:32 +00:00
SampleEmboss.cpp Revert "Revert "make it illegal to include SkXfermode.h"" 2016-11-23 22:17:17 +00:00
SampleFatBits.cpp SkCanvas: Helpers for draw{Point,Line,Circle} 2017-05-16 12:59:11 +00:00
SampleFillType.cpp Style bikeshed - remove extraneous whitespace 2016-03-29 09:03:53 -07:00
SampleFilter2.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleFilterFuzz.cpp remove (unused?) arcto patheffect 2017-07-24 12:53:19 +00:00
SampleFilterQuality.cpp Move expensive initialization to onOnceBeforeDraw 2017-07-12 20:30:50 +00:00
SampleFontCache.cpp Style bikeshed - remove extraneous whitespace 2016-03-29 09:03:53 -07:00
SampleFontScalerTest.cpp Factor code to rotate a canvas about a point. 2016-07-12 15:01:19 -07:00
SampleFuzz.cpp Revert "Revert "make it illegal to include SkXfermode.h"" 2016-11-23 22:17:17 +00:00
SampleGradients.cpp Style bikeshed - remove extraneous whitespace 2016-03-29 09:03:53 -07:00
SampleHairCurves.cpp Style bikeshed - remove extraneous whitespace 2016-03-29 09:03:53 -07:00
SampleHairline.cpp SkCanvas: Helpers for draw{Point,Line,Circle} 2017-05-16 12:59:11 +00:00
SampleHairModes.cpp Use SkBlendMode_Name rather than one-off tables 2017-03-15 16:52:49 +00:00
SampleHT.cpp Factor code to rotate a canvas about a point. 2016-07-12 15:01:19 -07:00
SampleIdentityScale.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleLayerMask.cpp Revert "Revert "Reland: Remove SkLights include from SkCanvas.h"" 2017-05-03 19:17:11 +00:00
SampleLayers.cpp Initial clip-mask-layer support 2017-05-01 14:07:10 +00:00
SampleLCD.cpp Rein in the use of SkDevice.h 2016-04-20 05:29:51 -07:00
SampleLighting.cpp chmod -x *.cpp *.h 2016-10-27 16:41:14 +00:00
SampleLines.cpp Revert "Revert "make it illegal to include SkXfermode.h"" 2016-11-23 22:17:17 +00:00
SampleLitAtlas.cpp bench, samples, etc: s/SkAutoTUnref/sk_sp/ 2016-11-07 15:17:32 +00:00
SampleLua.cpp Move off SK_SUPPORT_LEGACY_DATA_FACTORIES. 2016-08-02 14:40:46 -07:00
SampleManyRects.cpp hide trivial helpers on canvas 2017-02-22 19:41:04 +00:00
SampleMeasure.cpp Style bikeshed - remove extraneous whitespace 2016-03-29 09:03:53 -07:00
SampleMegaStroke.cpp add new tests 2016-01-30 10:11:21 -08:00
SamplePatch.cpp move vertex-mode enum into SkVertices 2017-04-03 15:50:16 +00:00
SamplePath.cpp remove (unused?) arcto patheffect 2017-07-24 12:53:19 +00:00
SamplePathClip.cpp SkCanvas: Helpers for draw{Point,Line,Circle} 2017-05-16 12:59:11 +00:00
SamplePathEffects.cpp begin to hide details of SkPathEffect 2017-02-26 18:36:11 +00:00
SamplePathFill.cpp stop using SkScalarMul 2017-02-14 19:45:24 +00:00
SamplePathFinder.cpp Add a simple tool for isolating a path from an SKP 2017-03-27 19:19:19 +00:00
SamplePathFuzz.cpp Revert[2] "Change SkCanvas to *not* inherit from SkRefCnt" 2016-11-13 18:31:13 +00:00
SamplePathOverstroke.cpp Add cubic example and draw original path 2016-06-30 10:04:21 -07:00
SamplePathText.cpp Fix WavyPathText sample 2017-06-21 05:32:30 +00:00
SamplePdfFileViewer.cpp Revert "Revert "make it illegal to include SkXfermode.h"" 2016-11-23 22:17:17 +00:00
SamplePictFile.cpp Restore SampleApp picture drawing 2017-05-30 15:59:19 +00:00
SamplePoints.cpp Revert "Revert "make it illegal to include SkXfermode.h"" 2016-11-23 22:17:17 +00:00
SamplePolyToPoly.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleQuadStroker.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleRectanizer.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleRegion.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleRepeatTile.cpp Style bikeshed - remove extraneous whitespace 2016-03-29 09:03:53 -07:00
SampleShaders.cpp hide trivial helpers on canvas 2017-02-22 19:41:04 +00:00
SampleShaderText.cpp use Make instead of Create to return a shared shader 2016-03-08 18:50:00 -08:00
SampleShadowColor.cpp Add tonal color support for shadows. 2017-06-09 17:18:58 +00:00
SampleShadowReference.cpp Add Material Design shadow reference sample 2017-05-23 18:12:15 +00:00
SampleShadowUtils.cpp Revert "Revert "Delete SkGaussianEdgeShader"" 2017-05-31 14:52:12 +00:00
SampleShip.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleSlides.cpp move vertex-mode enum into SkVertices 2017-04-03 15:50:16 +00:00
SampleStringArt.cpp Style Change: NULL->nullptr 2015-08-27 07:41:16 -07:00
SampleStrokePath.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleStrokeRect.cpp Rein in the use of SkDevice.h 2016-04-20 05:29:51 -07:00
SampleSubpixelTranslate.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleSVGFile.cpp Mark overridden destructors with 'override' and remove 'virtual' 2017-03-22 16:06:18 +00:00
SampleSVGPong.cpp [SVGDom] Expose intrinsic size info 2016-09-14 12:04:30 -07:00
SampleText.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleTextAlpha.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleTextBox.cpp Revert "Revert "make it illegal to include SkXfermode.h"" 2016-11-23 22:17:17 +00:00
SampleTextOnPath.cpp Style bikeshed - remove extraneous whitespace 2016-03-29 09:03:53 -07:00
SampleTextureDomain.cpp hide lockpixels api behind flag 2017-04-17 15:33:36 +00:00
SampleTiling.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleUnpremul.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleVertices.cpp hide lockpixels api behind flag 2017-04-17 15:33:36 +00:00
SampleWritePixels.cpp Style bikeshed - remove extraneous whitespace 2016-03-29 09:03:53 -07:00
SampleXfer.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
SampleXfermodesBlur.cpp add drawString helper to canvas 2017-04-28 20:41:04 +00:00
vertexdump.cpp Style bikeshed - remove extraneous whitespace 2016-03-29 09:03:53 -07:00