49
A modern 2D graphics library Introduction to Eduardo Lima Mitev [email protected] October 14th, 2014

Introduction to Skia, a modern 2D graphics library

Embed Size (px)

Citation preview

Page 1: Introduction to Skia, a modern 2D graphics library

A modern 2D graphics library

Introduction to

Eduardo Lima [email protected]

October 14th, 2014

Page 2: Introduction to Skia, a modern 2D graphics library

What is Skia?

Page 3: Introduction to Skia, a modern 2D graphics library

A library for drawing 2D Text, Geometries and Images

What is Skia?

Page 4: Introduction to Skia, a modern 2D graphics library

Focus on accurate, high qualityand high performance rendering

What is Skia?

Page 5: Introduction to Skia, a modern 2D graphics library

Cross-platform: Linux, Android,ChromeOS, Mac, Windows, ...

What is Skia?

and hardware architectures too:x86, x86_64, ARMv7, AArch64, MIPS, ...

Page 6: Introduction to Skia, a modern 2D graphics library

Open source, licensed underthe New BSD free software license

What is Skia?

Page 7: Introduction to Skia, a modern 2D graphics library

Figure 1. Skia in the software stack

Skia in a typical software stack

Page 8: Introduction to Skia, a modern 2D graphics library

Originally developed by Skia, Inc,acquired by Google in 2005,then released as open source

History

Page 9: Introduction to Skia, a modern 2D graphics library

Sponsored and managed by Google ever since

History

Page 10: Introduction to Skia, a modern 2D graphics library

Cairo, QPainter (Qt), Direct2D, Cocoa Drawing

Similar projects

Page 11: Introduction to Skia, a modern 2D graphics library

Why should I care?Lets hold on this one for a while...

Page 12: Introduction to Skia, a modern 2D graphics library

Who uses Skia?

Page 13: Introduction to Skia, a modern 2D graphics library

Who uses Skia?

Android Chromium Chrome Firefox Firefox OS

Page 14: Introduction to Skia, a modern 2D graphics library

Combined user-base could be above 1.5 billion

Who uses Skia?

Page 15: Introduction to Skia, a modern 2D graphics library

How Skia works?

Page 16: Introduction to Skia, a modern 2D graphics library

(Figure 2. High level architecture)

How Skia works?

Page 17: Introduction to Skia, a modern 2D graphics library

● Raster● OpenGL (ES)● PDF● XPS● Picture

Skia backends

Page 18: Introduction to Skia, a modern 2D graphics library

API overview

Page 19: Introduction to Skia, a modern 2D graphics library

SkCanvas: main drawing API(drawRect, drawText, drawLine, drawPath, etc)

API overview

Page 20: Introduction to Skia, a modern 2D graphics library

SkPaint: encapsulates styling of draw calls (color, path style, blending mode, font, etc)

API overview

Page 21: Introduction to Skia, a modern 2D graphics library

SkDevice: abstracts the backend (SkBitmapDevice, SkGpuDevice, SkPDFDevice, etc)

API overview

Page 22: Introduction to Skia, a modern 2D graphics library

SkPicture, SkPicturePlayback: records and replay draw operations

API overview

Page 23: Introduction to Skia, a modern 2D graphics library

Main features

Page 24: Introduction to Skia, a modern 2D graphics library

Linear transforms and perspective(3x3 matrices)

Main features

Page 25: Introduction to Skia, a modern 2D graphics library

Shaders, xfermodes, mask filters, path effects

Main features

Page 26: Introduction to Skia, a modern 2D graphics library

Antialiasing, transparency, filters

Main features

Page 27: Introduction to Skia, a modern 2D graphics library

Deferred drawing (SkDeferredCanvas, SkPicture)

Main features

Page 28: Introduction to Skia, a modern 2D graphics library

Subpixel text rendering

Main features

Page 29: Introduction to Skia, a modern 2D graphics library

Ganesh: the OpenGL(ES) backend

Page 30: Introduction to Skia, a modern 2D graphics library

Backend where most of the work is currently focused

Ganesh: the OpenGL(ES) backend

Page 31: Introduction to Skia, a modern 2D graphics library

Accelerates 2D Canvas in Chromium/Chrome and Firefox

Ganesh: the OpenGL(ES) backend

Page 32: Introduction to Skia, a modern 2D graphics library

Expected to accelerate full web content rendering in the future

Ganesh: the OpenGL(ES) backend

Page 33: Introduction to Skia, a modern 2D graphics library

Some features:

Ganesh: the OpenGL(ES) backend

● Accelerate and combine effects with on-demand shaders

● Batching and merging of draw operations● Geometry shaders● Accelerated path rendering if available

(NV_path_rendering)

Page 34: Introduction to Skia, a modern 2D graphics library

Performance

Page 35: Introduction to Skia, a modern 2D graphics library

Performance

Great tools available:● Benchmarks in Skia repository under /bench● Skia-telemetry● skiaperf.com

● Chromium/Chrome’s about:tracing can also help

Page 36: Introduction to Skia, a modern 2D graphics library

Performance

Lack of public benchmarks against similar libraries

Page 37: Introduction to Skia, a modern 2D graphics library

The future of Skia

Page 38: Introduction to Skia, a modern 2D graphics library

Roadmap

Backend work:● Enhance PDF for Android and Chrome● Many GPU backend changes

Page 39: Introduction to Skia, a modern 2D graphics library

Roadmap

Platform support:● C++11 enablement● GLSL ES 3.0

Page 40: Introduction to Skia, a modern 2D graphics library

Roadmap

APIs and New Features:● Shareable pictures across process boundaries● sRGB support, in partnership with Chrome

Page 41: Introduction to Skia, a modern 2D graphics library

Roadmap

Dev and Test Infrastructure:● New correctness testing framework● More frequent recapturing of web archives for

buildbot and cluster telemetry testing

Page 42: Introduction to Skia, a modern 2D graphics library

Contributing to Skia

Page 43: Introduction to Skia, a modern 2D graphics library

Three well defined roles:developer, contributor, committer

Contributing to Skia

Page 44: Introduction to Skia, a modern 2D graphics library

Report bugs to the issue tracker

Contributing to Skia

Page 45: Introduction to Skia, a modern 2D graphics library

Test: try Skia in your platform/hardware. Feed back!

Contributing to Skia

Page 46: Introduction to Skia, a modern 2D graphics library

Contribute code: fix bugs, implement features in the roadmap

Contributing to Skia

beginners, look for issues tagged GoodFirstBug

Page 47: Introduction to Skia, a modern 2D graphics library

Benchmark: compare Skia perf against other libraries in your platform/hardware; publish results!

Contributing to Skia

Page 48: Introduction to Skia, a modern 2D graphics library

https://sites.google.com/site/skiadocs/

For references and more info:

Page 49: Introduction to Skia, a modern 2D graphics library

Q & A

Thank you!