OLD | NEW |
1 Skia Update | 1 Skia Update |
2 | 2 |
| 3 Skia : Access |
| 4 - code.google.com/p/skia |
| 5 - sites.google.com/site/skiadocs |
| 6 |
3 Skia : Overview | 7 Skia : Overview |
4 - portable 2D graphics engine | 8 - portable graphics engine |
5 - src : geometry, images, text | 9 - 2D transformations + perspective |
6 - attr: shaders, filters, antialiasing, blending | 10 - primitives: text, geometry, images |
7 - dst : raster, gpu, pdf, picture | 11 - effects: shaders, filters, antialiasing, blending |
8 | 12 |
9 Skia : Porting | 13 Skia : Porting |
10 - C++ and some SIMD assembly | 14 - C++ and some SIMD assembly |
11 - Fonts : CoreText, FreeType, GDI, DirectWrite | 15 - Fonts : CoreText, FreeType, GDI, DirectWrite |
12 - Threads : wrappers for native apis | 16 - Threads : wrappers for native apis |
13 - Memory : wrappers for [new, malloc, discardable] | 17 - Memory : wrappers for [new, malloc, discardable] |
14 | 18 |
| 19 Skia : Backends |
| 20 - Surface |
| 21 -- raster : ARGB, RGB16, A8 in software |
| 22 -- gpu : transcribe to OpenGL |
| 23 - Document |
| 24 -- transcribe to PDF or XPS |
| 25 - Record and Playback |
| 26 -- Picture |
| 27 -- Pipe |
| 28 |
15 Skia : Clients | 29 Skia : Clients |
16 - Blink : under the GraphicsContext hood | 30 - Blink : under the GraphicsContext hood |
17 - Chrome : ui/gfx and compositor | 31 - Chrome : ui/gfx and compositor |
18 - Android framework | 32 - Android : framework |
19 - third parties : e.g. Mozilla | 33 - third parties : e.g. Mozilla |
20 - sites.google.com/site/skiadocs | |
21 | 34 |
22 Skia In Blink | 35 Skia In Blink |
23 | 36 |
24 Skia In Blink : Fonts | 37 Skia In Blink : Fonts |
25 - SkTypeface and SkFontMgr : platform agnostic | 38 - SkTypeface and SkFontMgr : platform agnostic |
26 - Runtime switch between GDI and DirectWrite | 39 - Runtime switch between GDI and DirectWrite |
27 - SkTextBlob to encapsulate runs of text | 40 - SkTextBlob to encapsulate runs of text |
28 - Push LCD decision-making out of Blink | 41 - Push LCD decision-making out of Blink |
29 | 42 |
30 Skia In Blink : Record-Time-Rasterization | 43 Skia In Blink : Record-Time-Rasterization |
31 - Direct rendering during “Paint” pass | 44 - What? : direct rendering during “Paint” pass |
32 -- Image scaling, filters | 45 -- Image scaling, filters |
33 -- SVG patterns, masks | 46 -- SVG patterns, masks |
34 - Problematic in modern Blink | 47 - Problematic in modern Blink |
35 -- CTM not always known/knowable | 48 -- CTM not always known/knowable |
36 -- Rendering backend not always known (gpu or cpu) | 49 -- Rendering backend not always known (gpu or cpu) |
37 -- Rasterization takes (too much) time | 50 -- Rasterization takes (too much) time |
38 | 51 |
39 Skia In Blink : RTR response | 52 Skia In Blink : RTR response |
40 - SkImageFilter w/ CPU and GPU implementations | 53 - SkImageFilter w/ CPU and GPU implementations |
41 - FilterLevel : none, low, medium (mipmaps), high | 54 - Bitmap scaling : bilerp, mipmaps, fancy |
42 - SkPicture for caching SVG | 55 - SkPicture for caching SVG |
43 - SkPicture + saveLayer() for masks | 56 - SkPicture + saveLayer() for masks |
44 -- PathOps for resolving complex paths | 57 -- PathOps for resolving complex paths |
45 - SkPictureShader for device-independent patterns | 58 - SkPictureShader for device-independent patterns |
46 | 59 |
47 Skia In Blink : Recording | 60 Skia In Blink : Recording |
48 - GraphicsContext usuaually backed by SkPicture | 61 - GraphicsContext (now) backed by SkPicture |
49 -- draw commands are recorded for later playback | 62 -- draw commands are recorded for later playback |
50 -- all parameters must be copied or (safely) ref'd | 63 -- all parameters must be copied or (safely) ref'd |
51 -- may record more than is currently visible | 64 -- may record more than is currently visible |
52 - Resulting picture may be replayed multiple times | 65 - Resulting picture may be replayed multiple times |
| 66 -- from different thread(s) |
53 | 67 |
54 Skia In Blink : Recording response | 68 Skia In Blink : Recording response |
55 - New implementation | 69 - New implementation |
56 - Optimized for recording speed | 70 - Optimized for recording speed |
57 -- shallow copies whenever possible | 71 -- shallow copies whenever possible |
58 -- rearchitect all Skia effects to be immutable | 72 -- rearchitect all Skia effects to be immutable |
59 - Reentrant-safe for playback in multiple threads | 73 - Reentrant-safe for playback in multiple threads |
60 -- also affected effect subclasses | 74 -- also affected effect subclasses |
61 | 75 |
62 Skia In Blink : Playback | 76 Skia In Blink : Playback |
63 - Separate pass for optimizations (optional) | 77 - Separate pass for optimizations (optional) |
64 -- peep-holes rewrites | 78 -- peep-holes rewrites |
65 -- compute bounding-box hierarchy for faster tiling | 79 -- compute bounding-box hierarchy for faster tiling |
66 -- can be done outside of Blink thread | 80 -- can be done outside of Blink thread |
67 - GPU optimizations | 81 - GPU optimizations |
68 -- layer "hoisting" | 82 -- layer "hoisting" |
69 -- distance field fonts | 83 -- distance fields : fonts and concave paths |
| 84 |
| 85 Skia In Blink : multi-picture-draw |
| 86 - mpd(canvas[], picture[], matrix[], paint[]) |
| 87 - Requires independent canvas objects |
| 88 -- all other parameters can be shared |
| 89 -- draw order is unspecified |
| 90 - Examples |
| 91 -- 1 picture drawing to multiple tiles (canvases) |
| 92 -- multiple pictures each drawing to its own layer |
| 93 |
| 94 Skia In Blink : MPD optimizations* |
| 95 - GPU |
| 96 -- "layer hoisting" to reduce rendertarget switching |
| 97 -- layer atlasing (also applies to imagefilters) |
| 98 -- pre-uploading of textures |
| 99 -- atlas yuv (from jpeg) to convert on gpu |
| 100 - CPU |
| 101 -- parallel execution using thread pool |
| 102 -- pre-decoding of images based on visibility |
70 | 103 |
71 Skia : Roadmap | 104 Skia : Roadmap |
72 | 105 |
73 Skia In Blink : Roadmap | 106 Skia : Roadmap - performance |
74 - GPU performance | 107 - GPU |
75 -- extended OpenGL features (e.g. geometry shaders) | 108 -- extended OpenGL features (e.g. geometry shaders) |
76 -- reordering for increased batching | 109 -- reordering for increased batching |
77 -- support for new low-level OpenGL APIs | 110 -- support for new low-level OpenGL APIs |
| 111 - CPU |
| 112 -- SIMD applied to floats |
| 113 -- smarter culling in pictures |
| 114 |
| 115 Skia : Roadmap - API |
78 - Cross process support | 116 - Cross process support |
79 -- immediate mode ala SkGPipe | |
80 -- serialize pictures | |
81 | |
82 Skia API Roadmap | |
83 - Direct support for sRGB | 117 - Direct support for sRGB |
84 - Stable C API / ABI | 118 - Robust file format |
| 119 - Support PDF viewing |
| 120 - Stable C ABI |
85 -- bindings for JS, Go, Python, Lua | 121 -- bindings for JS, Go, Python, Lua |
86 - Robust file format | |
87 | 122 |
88 Demo | 123 Demo |
89 | |
OLD | NEW |