Efficient Graphics with Qt

63
Ecient Graphics with Qt ARIYA HIDAYAT ENGINEERING DIRECTOR, SENCHA 1

Transcript of Efficient Graphics with Qt

Page 1: Efficient Graphics with Qt

E!cient Graphics with Qt

ARIYA HIDAYATENGINEERING DIRECTOR, SENCHA

1

Page 2: Efficient Graphics with Qt

whoami

2

Page 3: Efficient Graphics with Qt

?

3

Page 4: Efficient Graphics with Qt

about...Patterns on beauty

2-D low-level QPainter

Graphics View

Widget tricks

4

Page 5: Efficient Graphics with Qt

and NOT aboutQt Quick (QML)

Scene Graph

5

Page 6: Efficient Graphics with Qt

ObjectivesIdeas & tricks to beautify

your Qt & KDE apps

6

Page 7: Efficient Graphics with Qt

7

Page 8: Efficient Graphics with Qt

8

Page 9: Efficient Graphics with Qt

9

Page 10: Efficient Graphics with Qt

Graphics PerformanceGunnar Sletta’s blog posts on Qt Labs

http://labs.qt.nokia.com/author/gunnar/

10

Page 11: Efficient Graphics with Qt

Premature Optimization...

11

Page 12: Efficient Graphics with Qt

Blazing Fast. How?

12

Page 13: Efficient Graphics with Qt

Avoid Slow Operations

13

Page 14: Efficient Graphics with Qt

Don’t Assume. Measure!

Valgrind Shark

14

Page 15: Efficient Graphics with Qt

Transformation

15

Page 16: Efficient Graphics with Qt

QTransform

16

Page 17: Efficient Graphics with Qt

Flipping Clock

http://labs.qt.nokia.com/2009/07/15/digital-clock-in-a-phone/17

Page 18: Efficient Graphics with Qt

Composing Screenshots

18

Page 21: Efficient Graphics with Qt

Ray Casting

http://labs.qt.nokia.com/2009/08/09/ray-casting-on-qts60/

21

Page 23: Efficient Graphics with Qt

Pixel Manipulation

23

Page 24: Efficient Graphics with Qt

Accessing Pixels in QImage

QRgb QImage::pixel (int x, int y)void QImage::setPixel (int x, int y, uint rgb )

24

Page 25: Efficient Graphics with Qt

Faster Pixel Accessbits()

scanLine(y)

25

Page 26: Efficient Graphics with Qt

Careful with Implicit Sharinguchar * QImage::bits ()

const uchar * QImage::bits ()

26

Page 27: Efficient Graphics with Qt

Pixel Shifting

http://labs.qt.nokia.com/2008/07/13/underwater-e!ect/27

Page 29: Efficient Graphics with Qt

Image Formats

ARGB32A: 128R: 175G: 212B: 240

ARGB32_PremultipliedA: 128R: 088G: 106B: 120

29

Page 30: Efficient Graphics with Qt

Faster Alpha Blending

R = Rs As + Rd Ad

R = Rs + Rd Ad

30

Page 31: Efficient Graphics with Qt

Cache Friendly

31

Page 32: Efficient Graphics with Qt

Let There Be Colors

32-bit 16-bit

32

Page 33: Efficient Graphics with Qt

Special F/X

33

Page 34: Efficient Graphics with Qt

With great power must come great responsibility.

34

Page 35: Efficient Graphics with Qt

Grayscale

35

Page 36: Efficient Graphics with Qt

Composition Modes

36

Page 37: Efficient Graphics with Qt

Tint / Colorize

http://labs.qt.nokia.com/2008/11/10/colorize-an-image-via-painter-composition/

37

Page 38: Efficient Graphics with Qt

RGB, HSL, HSV

38

Page 39: Efficient Graphics with Qt

Bloom

http://labs.qt.nokia.com/2008/06/29/bloom-e!ect/

39

Page 40: Efficient Graphics with Qt

Night Mode

http://labs.qt.nokia.com/2009/06/09/night-mode-in-qwebview/40

Page 41: Efficient Graphics with Qt

Shadow Blur

http://ariya.blogspot.com/2010/09/art-of-blurring-shadow.html41

Page 42: Efficient Graphics with Qt

Genie

http://labs.qt.nokia.com/2008/12/15/genie-fx/42

Page 43: Efficient Graphics with Qt

Morphing

http://ariya.blogspot.com/2010/03/morphing-clock.html43

Page 44: Efficient Graphics with Qt

Physics

44

Page 45: Efficient Graphics with Qt

Easing

http://labs.qt.nokia.com/2009/03/03/qtimeline-made-easy/45

Page 46: Efficient Graphics with Qt

Parallax Sliding

http://labs.qt.nokia.com/2008/11/03/parallax-sliding/46

Page 47: Efficient Graphics with Qt

Magnifying Glass

http://labs.qt.nokia.com/2009/10/07/magnifying-glass/47

Page 48: Efficient Graphics with Qt

Kinetic Scrolling

http://labs.qt.nokia.com/2009/07/19/kinetic-scrolling-on-any-widgets/

48

Page 49: Efficient Graphics with Qt

Physics Engine

http://ariya.blogspot.com/2010/08/box-of-marbles-redux.html49

Page 50: Efficient Graphics with Qt

Minimize Path Operations

collision detection

50

Page 51: Efficient Graphics with Qt

Approximation

Qt::IntersectItemShape Qt::IntersectBoundingRect

51

Page 52: Efficient Graphics with Qt

Widgets & Applications

52

Page 53: Efficient Graphics with Qt

Graphics System

yourapp -graphicssystem raster

native Automaticraster Pure software rasterizerx11 Use X11 + its extensions

opengl Use OpenGL (ES) 2

53

Page 54: Efficient Graphics with Qt

Widget Attributes

Qt::WA_StaticContentspaint events only for the newly visible part

Qt::WA_OpaquePaintEventpaints all its pixels when it receives a paint event

Qt::WA_NoSystemBackgroundthe background is not automatically repainted

54

Page 55: Efficient Graphics with Qt

More Widget Attributes

Qt::WA_PaintOnScreendraw directly onto the screenmight cause flickering!!

Qt::WA_NativeWindow this widget is native (to the window system)

Qt::WA_DontCreateNativeAncestorsthe widget's ancestors are kept non-native

55

Page 56: Efficient Graphics with Qt

Antialiasing

56

Page 57: Efficient Graphics with Qt

Thumbnail Preview

57

Page 58: Efficient Graphics with Qt

Faster Downscaling

http://labs.qt.nokia.com/2009/01/26/creating-thumbnail-preview/

58

Page 59: Efficient Graphics with Qt

Fast vs Smooth

59

Page 60: Efficient Graphics with Qt

Smooth vs Cheat

60

Page 61: Efficient Graphics with Qt

Conclusions

61

Page 62: Efficient Graphics with Qt

Patterns of BeautyTranformations

Special E!ects

Pixel manipulations

Physics

62

Page 63: Efficient Graphics with Qt

THANK YOU!

ariya @ kde.org

ariyahidayat

ariya.blogspot.com

63