OLD | NEW |
1 Skia Update | 1 Skia Update |
2 | 2 |
3 Skia : Overview | 3 Skia : Overview |
4 - portable 2D graphics engine | 4 - portable 2D graphics engine |
5 - src: geometry, images, text | 5 - src : geometry, images, text |
6 - dst : raster, gpu, pdf, displaylist, *user-defined | 6 - attr: shaders, filters, antialiasing, blending |
7 - attr: shaders, filters, antialiasing, blending, *user-defined | 7 - dst : raster, gpu, pdf, picture |
| 8 |
| 9 Skia : Porting |
| 10 - C++ and some SIMD assembly |
| 11 - Fonts : CoreText, FreeType, GDI, DirectWrite |
| 12 - Threads : wrappers for native apis |
| 13 - Memory : wrappers for [new, malloc, discardable] |
8 | 14 |
9 Skia : Clients | 15 Skia : Clients |
10 - Blink : direct and via GraphicsContext | 16 - Blink : under the GraphicsContext hood |
11 - Chrome : ui/gfx and compositor | 17 - Chrome : ui/gfx and compositor |
12 - Android framework | 18 - Android framework |
13 - third parties : e.g. Mozilla | 19 - third parties : e.g. Mozilla |
14 - code.google.com/p/skia | 20 - sites.google.com/site/skiadocs |
15 | 21 |
16 Skia : Porting | 22 Skia In Blink |
17 - C++ and some SIMD assembly | |
18 - Fonts : CoreText, FreeType, GDI, DirectWrite, *user-define | |
19 - Threads : wrappers for native apis | |
20 - Memory : wrappers for [new, malloc, discardable] | |
21 | |
22 Skia : API | |
23 - SkCanvas | |
24 -- save, saveLayer, restore | |
25 -- translate, scale, rotate, concat | |
26 -- clipRect, clipPath | |
27 - SkPaint | |
28 -- color, stroking, antialiasing, filtering | |
29 -- typeface, textSize, text-flags | |
30 -- effects: shader, color-filter, image-filter, mask-filter, xfermode | |
31 | |
32 <blockstyle = code> | |
33 void onDraw(SkCanvas* canvas) { | |
34 SkPaint paint; | |
35 paint.setFoo(...); | |
36 canvas->drawRect(..., paint); | |
37 paint.setBar(...); | |
38 canvas->drawOval(..., paint); | |
39 } | |
40 | |
41 <blockstyle = code> | |
42 void onDraw(SkCanvas* canvas) { | |
43 canvas->drawRect(..., fPaint0); | |
44 canvas->drawOval(..., fPaint1); | |
45 } | |
46 | |
47 Skia In Blink : GraphicsContext | |
48 - Similar | |
49 -- rects, paths, images, text | |
50 -- matrices, clips | |
51 - Different | |
52 -- save/restore affect matrix+clip PLUS all paint settings | |
53 -- both fill and stroke settings are specified | |
54 -- hence: fillRect(), strokeRect(), drawRect() | |
55 | |
56 <blockstyle = code> | |
57 void onDraw(GraphicsContext* gc) { | |
58 gc->save(); | |
59 gc->setFoo(...); | |
60 gc->fillRect(...); | |
61 gc->setBar(...); | |
62 gc->fillOval(...); | |
63 gc->restore(); | |
64 } | |
65 | |
66 Skia In Blink : more than GraphicsContext | |
67 - Simple wrappers | |
68 -- FloatRect -- SkRect | |
69 -- Path -- SkPath | |
70 - Font.h + 21 others | |
71 -- SkTypeface + flags | |
72 - Image.h + 25 others | |
73 -- SkBitmap, SkImage | |
74 | 23 |
75 Skia In Blink : Fonts | 24 Skia In Blink : Fonts |
76 - Assist with code-sharing between platforms | 25 - SkTypeface and SkFontMgr : platform agnostic |
77 - Runtime switch between GDI and DirectWrite | 26 - Runtime switch between GDI and DirectWrite |
78 - Add SkFontMgr for selection | 27 - SkTextBlob to encapsulate runs of text |
79 - Push LCD decision-making out of Blink | 28 - Push LCD decision-making out of Blink |
80 | 29 |
81 Skia In Blink : Record-Time-Rasterization | 30 Skia In Blink : Record-Time-Rasterization |
82 - Direct rendering during “Paint” pass | 31 - Direct rendering during “Paint” pass |
83 -- Image scaling, filters | 32 -- Image scaling, filters |
84 -- SVG patterns, masks | 33 -- SVG patterns, masks |
85 - Problematic in modern Blink | 34 - Problematic in modern Blink |
86 -- CTM not always known/knowable | 35 -- CTM not always known/knowable |
87 -- Rendering backend not always known (gpu or cpu) | 36 -- Rendering backend not always known (gpu or cpu) |
88 -- Rasterization takes (too much) time | 37 -- Rasterization takes (too much) time |
89 | 38 |
90 Skia In Blink : RTR response | 39 Skia In Blink : RTR response |
91 - SkImageFilter w/ CPU and GPU implementations | 40 - SkImageFilter w/ CPU and GPU implementations |
92 - SkPaint::FilterLevel : none, low, medium (mipmaps), high | 41 - FilterLevel : none, low, medium (mipmaps), high |
93 - SkPicture for caching SVG | 42 - SkPicture for caching SVG |
94 - SkPicture + saveLayer() for masks | 43 - SkPicture + saveLayer() for masks |
95 -- PathOps for resolving complex paths | 44 -- PathOps for resolving complex paths |
96 - SkPictureShader for device-independent patterns | 45 - SkPictureShader for device-independent patterns |
| 46 |
| 47 Skia In Blink : Recording |
| 48 - GraphicsContext usuaually backed by SkPicture |
| 49 -- draw commands are recorded for later playback |
| 50 -- all parameters must be copied or (safely) ref'd |
| 51 -- may record more than is currently visible |
| 52 - Resulting picture may be replayed multiple times |
| 53 |
| 54 Skia In Blink : Recording response |
| 55 - New implementation |
| 56 - Optimized for recording speed |
| 57 -- shallow copies whenever possible |
| 58 -- rearchitect all Skia effects to be immutable |
| 59 - Reentrant-safe for playback in multiple threads |
| 60 -- also affected effect subclasses |
| 61 |
| 62 Skia In Blink : Playback |
| 63 - Separate pass for optimizations (optional) |
| 64 -- peep-holes rewrites |
| 65 -- compute bounding-box hierarchy for faster tiling |
| 66 -- can be done outside of Blink thread |
| 67 - GPU optimizations |
| 68 -- layer "hoisting" |
| 69 -- distance field fonts |
| 70 |
| 71 Skia : Roadmap |
| 72 |
| 73 Skia In Blink : Roadmap |
| 74 - GPU performance |
| 75 -- extended OpenGL features (e.g. geometry shaders) |
| 76 -- reordering for increased batching |
| 77 -- support for new low-level OpenGL APIs |
| 78 - Cross process support |
| 79 -- immediate mode ala SkGPipe |
| 80 -- serialize pictures |
| 81 |
| 82 Skia API Roadmap |
| 83 - Direct support for sRGB |
| 84 - Stable C API / ABI |
| 85 -- bindings for JS, Go, Python, Lua |
| 86 - Robust file format |
| 87 |
| 88 Demo |
| 89 |
OLD | NEW |