onscreen vs. offscreen rendering v ios - for-mobile 3/2013

Post on 29-Aug-2014

568 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Slidy z mé prezentace na téma "ONscreen vs. OFFscreen rendering v iOS", která proběhla na For-Mobile iOS v březnu 2013 v prostorách Microsoft ČR. Více o události For-Mobile: http://srazy.info/for-mobile/3293 #forMobileCZ

TRANSCRIPT

ONscreen vs. OFFscreen rendering

Tomáš Jukin@Inza

www.for-mobile.cz

@forMobileCZ #forMobileCZ

www.srazy.info/for-mobile

Březen 2013 - iOS

www.iknow.eu/cvut/

ONscreen vs. OFFscreen rendering

Tomáš Jukin@Inza

iOS StackUIKitUIKit

Core AnimationCore Animation

OpenGL ES Core Graphics

GPU CPU

iOS StackUIKitUIKit

Core AnimationCore Animation

OpenGL ES Core Graphics

GPU CPU

UIButtonUILabel

smooth transitions

2D/3D Graphics Quartz

iOS StackUIKitUIKit

Core AnimationCore Animation

OpenGL ES Core Graphics

GPU CPU

UIButtonUILabel

smooth transitions

2D/3D Graphics Quartz

C languageC language

iOS StackUIKitUIKit

Core AnimationCore Animation

OpenGL ES Core Graphics

GPU CPU

Hardware Acceleration

GPU

ONscreen rendering

data obrazovka

OFFscreen rendering

CPUdata

GPU

bitmapa

obrazovka

Kdy se použije OFFscreen rendering?

• Core Graphics (když použiju cokoliv s CG*)• drawRect() metoda, i prázdná!• CALayer s shouldRasterize == YES.• CALayer s maskami (setMasksToBounds)

dynamickými stíny (setShadow*).• drawText včetně Core Text.• použití group opacity (UIViewGroupOpacity).

Proč a kdy to vadí?

“Offscreen drawing affects performance when animation is involved”

Jak to testovat?

Nebo to umí i Instruments...

Case Study: UIButton

Předrenderované assety

CALayer

drawRect

Jak udělat grafiku pro UIButton?

Předrenderované assetyGPU + předrenderované malé resizeable/tileable obrázky

ZENové, náročné na údržbu a realizaci

CALayernutné OFFscreen průběhy pro maskování rohů

v Core Animation je defaultně zapnutá animace

Overkill

drawRectdrawRect -> Core Graphics

touch -> setNeedsDisplay -> redraw

CPU & memory waste

hodně tlačítek v UI naráz = smrt

Závěr? Máme tedy JEN assety?NE!

Je tu hybridní přístup:

Kód -> obrázek -> assetový postup pro všechny instance

One more thing...

GPU OFFscreen rendering!CPU OFFscreen rendering je synchronní s aplikací- je to zápis do bitmapy pixel by pixel

OFFscreen rendering může dělat i GPU! -> render server - asynchronně

Změna kontextu mezi ON a OFF je pro GPU ale strašně drahá!

GPU OFFscreen rendering!důsledek: GPU může kreslit pomaleji než CPU! (flush + bariéra)

Proto je CoreGraphics přes CPU

[CALayer setShouldRasterize:] vs. CG - nutno testovat!

Next

Next ?

KVC, KVO a Cocoa Bindings

Document Oriented Programing v Cocoa

Advanced Cora Data

top related