2014-11-03 03:19:34 +00:00
|
|
|
Skia Update
|
|
|
|
|
|
|
|
Skia : Overview
|
|
|
|
- portable 2D graphics engine
|
2014-11-04 06:32:07 +00:00
|
|
|
- src : geometry, images, text
|
|
|
|
- attr: shaders, filters, antialiasing, blending
|
|
|
|
- dst : raster, gpu, pdf, picture
|
2014-11-03 03:19:34 +00:00
|
|
|
|
|
|
|
Skia : Porting
|
|
|
|
- C++ and some SIMD assembly
|
2014-11-04 06:32:07 +00:00
|
|
|
- Fonts : CoreText, FreeType, GDI, DirectWrite
|
2014-11-03 03:19:34 +00:00
|
|
|
- Threads : wrappers for native apis
|
|
|
|
- Memory : wrappers for [new, malloc, discardable]
|
|
|
|
|
2014-11-04 06:32:07 +00:00
|
|
|
Skia : Clients
|
|
|
|
- Blink : under the GraphicsContext hood
|
|
|
|
- Chrome : ui/gfx and compositor
|
|
|
|
- Android framework
|
|
|
|
- third parties : e.g. Mozilla
|
|
|
|
- sites.google.com/site/skiadocs
|
2014-11-03 03:19:34 +00:00
|
|
|
|
2014-11-04 06:32:07 +00:00
|
|
|
Skia In Blink
|
2014-11-03 03:19:34 +00:00
|
|
|
|
|
|
|
Skia In Blink : Fonts
|
2014-11-04 06:32:07 +00:00
|
|
|
- SkTypeface and SkFontMgr : platform agnostic
|
2014-11-03 03:19:34 +00:00
|
|
|
- Runtime switch between GDI and DirectWrite
|
2014-11-04 06:32:07 +00:00
|
|
|
- SkTextBlob to encapsulate runs of text
|
2014-11-03 03:19:34 +00:00
|
|
|
- Push LCD decision-making out of Blink
|
|
|
|
|
|
|
|
Skia In Blink : Record-Time-Rasterization
|
|
|
|
- Direct rendering during “Paint” pass
|
|
|
|
-- Image scaling, filters
|
|
|
|
-- SVG patterns, masks
|
|
|
|
- Problematic in modern Blink
|
|
|
|
-- CTM not always known/knowable
|
|
|
|
-- Rendering backend not always known (gpu or cpu)
|
|
|
|
-- Rasterization takes (too much) time
|
|
|
|
|
|
|
|
Skia In Blink : RTR response
|
|
|
|
- SkImageFilter w/ CPU and GPU implementations
|
2014-11-04 06:32:07 +00:00
|
|
|
- FilterLevel : none, low, medium (mipmaps), high
|
2014-11-03 03:19:34 +00:00
|
|
|
- SkPicture for caching SVG
|
|
|
|
- SkPicture + saveLayer() for masks
|
|
|
|
-- PathOps for resolving complex paths
|
|
|
|
- SkPictureShader for device-independent patterns
|
2014-11-04 06:32:07 +00:00
|
|
|
|
|
|
|
Skia In Blink : Recording
|
|
|
|
- GraphicsContext usuaually backed by SkPicture
|
|
|
|
-- draw commands are recorded for later playback
|
|
|
|
-- all parameters must be copied or (safely) ref'd
|
|
|
|
-- may record more than is currently visible
|
|
|
|
- Resulting picture may be replayed multiple times
|
|
|
|
|
|
|
|
Skia In Blink : Recording response
|
|
|
|
- New implementation
|
|
|
|
- Optimized for recording speed
|
|
|
|
-- shallow copies whenever possible
|
|
|
|
-- rearchitect all Skia effects to be immutable
|
|
|
|
- Reentrant-safe for playback in multiple threads
|
|
|
|
-- also affected effect subclasses
|
|
|
|
|
|
|
|
Skia In Blink : Playback
|
|
|
|
- Separate pass for optimizations (optional)
|
|
|
|
-- peep-holes rewrites
|
|
|
|
-- compute bounding-box hierarchy for faster tiling
|
|
|
|
-- can be done outside of Blink thread
|
|
|
|
- GPU optimizations
|
|
|
|
-- layer "hoisting"
|
|
|
|
-- distance field fonts
|
|
|
|
|
|
|
|
Skia : Roadmap
|
|
|
|
|
|
|
|
Skia In Blink : Roadmap
|
|
|
|
- GPU performance
|
|
|
|
-- extended OpenGL features (e.g. geometry shaders)
|
|
|
|
-- reordering for increased batching
|
|
|
|
-- support for new low-level OpenGL APIs
|
|
|
|
- Cross process support
|
|
|
|
-- immediate mode ala SkGPipe
|
|
|
|
-- serialize pictures
|
|
|
|
|
|
|
|
Skia API Roadmap
|
|
|
|
- Direct support for sRGB
|
|
|
|
- Stable C API / ABI
|
|
|
|
-- bindings for JS, Go, Python, Lua
|
|
|
|
- Robust file format
|
|
|
|
|
|
|
|
Demo
|
|
|
|
|