Grafika a Vykreslování v Mobilním Vývoji: Co to Je, Jak Proces Funguje a Jak to Pracuje

Autor: IT Sectr Publikováno: 2026-06-16 Doba čtení: 8 min
Grafika a vykreslování jsou klíčové aspekty výkonu mobilních aplikací. Podle Apple OpenGL ES Guide je více než 90% vizuálních artefaktů způsobeno nesprávným vykreslováním. Porozumění grafické pipeline je nezbytné pro každého vývojáře pracujícího s animacemi a komplexním UI.

Klíčové Body

  • CPU Rendering — kreslení na centrálním procesoru. Pomalé, ale flexibilní. Canvas, Core Graphics (Quartz 2D). GPU Rendering — paralelní zpracování na grafickém procesoru. Metal, OpenGL ES, Vulkan.
  • Shader — program na GPU. Vertex Shader zpracovává vrcholy, Fragment Shader zpracovává pixely. Moderní vykreslování používá shadery.
  • Overdraw — opakované kreslení pixelu. Hlavní nepřítel výkonu. Nástroje: Debug GPU Overdraw, Color Blended Layers.
  • CALayer (iOS) — základní prvek Core Animation. CAShapeLayer — GPU-akcelerovaná vektorová grafika. Vector Drawable — Android formát.
  • Offscreen Rendering — vykreslování do bufferu před zobrazením. Potřebné pro stíny, zaoblené rohy a masky. Snižuje výkon — vyhněte se.

Grafika a Vykreslování: Základy CPU a GPU

Vykreslování je proces převodu dat (vrcholy, textury, shadery) na obraz na obrazovce. Na mobilních zařízeních může být vykreslování prováděno na CPU (centrální procesor) nebo GPU (grafický procesor). Volba závisí na typu grafiky a požadovaném výkonu.

CPU vs GPU Rendering

CPU Rendering — sekvenční zpracování. Každá instrukce je prováděna jedna po druhé. CPU je optimalizován pro logiku a větvení. Canvas (Android), Core Graphics (iOS) pracují na CPU. Výhoda: přesnost, podpora komplexních algoritmů. Nevýhoda: pomalé při velkém počtu grafických prvků. GPU Rendering — paralelní zpracování. Tisíce jader GPU zpracovávají současně vrcholy a pixely. Metal (iOS), Vulkan (Android), OpenGL ES (obě platformy) používají GPU. GPU Rendering je povinný pro 3D, animace 60 FPS a komplexní efekty. Moderní UI frameworky (SwiftUI, Jetpack Compose, Flutter) používají GPU standardně.

Shadery (Vertex, Fragment)

Shadery jsou programy prováděné na GPU. Určují, jak každý objekt vypadá na obrazovce. Grafická pipeline se skládá z několika fází, ale dva hlavní shadery — Vertex Shader a Fragment Shader — se používají v 99% případů. Shadery se píší v GLSL (OpenGL), MSL (Metal) nebo HLSL (DirectX).

Vertex Shader — zpracovává vrcholy 3D modelu. Vstup: pozice vrcholu, normála, UV souřadnice. Výstup: transformovaná pozice (model → pohled → projekce). Vertex Shader nemůže vytvářet nebo mazat vrcholy — pouze je transformovat. Fragment Shader — vypočítává barvu každého pixelu (fragmentu) v rasterizovaném trojúhelníku. Vstup: interpolovaná data z Vertex Shader (UV, normály). Výstup: barva RGBA. Fragment Shader je zodpovědný za texturování, osvětlení (Phong, PBR) a post-efekty. Moderní enginy (Unity, Unreal) generují shadery automaticky, ale porozumění pipeline je nezbytné pro optimalizaci.

Offscreen Rendering — vykreslování ne na obrazovku, ale do dočasného bufferu. Používá se pro: 1) efekty (blur, shadow), 2) renderování do textury, 3) předvýpočet snímků. Offscreen Rendering je nákladný: přepínání kontextu a dodatečný průchod vykreslováním. iOS automaticky zapíná Offscreen Rendering pro stíny a cornerRadius. Rasterizace — převod vektorových dat (vrcholy + shadery) na pixely. Rasterizátor určuje, které fragmenty patří do trojúhelníku a volá Fragment Shader. Kompozice — skládání vrstev do konečného obrazu. Core Animation komponuje CALayer, Android komponuje vrstvy SurfaceFlinger.

Parametr CPU Rendering GPU Rendering
ArchitekturaSekvenční (několik jader)Paralelní (stovky-tisíce jader)
RychlostPomalá pro grafikuRychlá pro hromadné operace
NástrojeCanvas, Core Graphics (Quartz 2D)Metal, OpenGL ES, Vulkan
PoužitíJednoduchá 2D grafika, text, UI3D, animace, hry, komplexní efekty
SpotřebaMéně energieVíce energie, ale rychlejší
OverdrawVysoká cenaNižší cena (ale stále škodlivý)

CPU — pro logiku a Canvas. GPU — pro grafiku a animace. IT Sectr doporučuje používat GPU rendering pro jakýkoli pohyblivý obsah (animace, přechody, rolování) — to zajišťuje stabilních 60 FPS.

Core Animation (CALayer, CAShapeLayer)

Core Animation — Apple framework pro GPU-akcelerované animované vykreslování. Základním prvkem je CALayer: obdélníková oblast s obsahem (obrázek, barva, text). CALayer spravuje: pozici, velikost, barvu pozadí, okraj, stín, cornerRadius a transformace (2D a 3D). Core Animation automaticky komponuje vrstvy na GPU — vývojář nemusí psát grafický kód.

CALayer

CALayer — lehký objekt (ne pohled), který obsahuje bitmapu obsahu. UIButton, UILabel, UIImageView — všechny interně používají CALayer. Vlastnosti: frame, bounds, position, anchorPoint, transform, opacity, masksToBounds. Animace vlastností CALayer probíhá na GPU — to je hlavní výhoda Core Animation. CALayer.shouldRasterize — zapíná rasterizaci vrstvy pro ukládání komplexní grafiky do mezipaměti. CAShapeLayer — podtřída pro vektorovou grafiku: kreslí cestu na GPU. Používá se pro ukazatele průběhu, grafy, masky a animaci tvarů. CAShapeLayer.path — animovatelná vlastnost (animace morfingu tvarů).

Kompozice v Core Animation — proces skládání CALayer do konečného snímku. Každý CALayer je samostatná textura na GPU. Kompozice probíhá v Render Server (samostatný proces). Vlastnosti vyžadující kompozici: opacity, shadow, cornerRadius + masksToBounds, shouldRasterize. Čím méně vrstev — tím rychlejší kompozice.

Optimalizace (Overdraw, Offscreen Rendering)

Overdraw — situace, kdy je stejný pixel malován několikrát v jednom snímku. Příklad: červené pozadí → modrý obdélník → text. Středový pixel je kreslen 3krát. Overdraw je hlavní příčinou zpomalení UI, zejména na starších zařízeních. iOS: Debug Color Blended Layers (Xcode) — červené oblasti = smíšené (overdraw). Android: Debug GPU Overdraw (Možnosti pro vývojáře) — barvy od modré (1x) po červenou (3x+).

Overdraw

Jak snížit Overdraw: 1) použijte opaque = true pro neprůhledné pohledy (iOS). 2) Android — použijte android:windowBackground pouze jednou. 3) Odstraňte neviditelné vrstvy. 4) Použijte vrstvenou architekturu: pozadí (1 průchod) → obsah (2 průchody). 5) Vyhněte se zbytečnému clipChildren a clipToPadding. Offscreen Rendering — vykreslování do bufferu před obrazovkou. Spouštěče: shadow (CALayer.shadow*), cornerRadius + masksToBounds, group opacity, shouldRasterize. Xcode: Debug Offscreen Renderer — žluté oblasti = offscreen. Na Androidu: profile GPU rendering — zkontrolujte délku pruhů.

Vektorová Grafika (SVG, Vector Drawable)

Vektorová grafika — obrázky popsané matematickými vzorci (cesty, křivky, výplně). Vektory neztrácejí kvalitu při změně měřítka — ideální pro ikony a ilustrace v mobilních aplikacích.

SVG (Scalable Vector Graphics) — standard W3C. Není přímo podporováno v mobilních OS. Převádí se: na iOS — do PDF vector assets (Xcode 12+), na Android — do Vector Drawable XML. Vector Drawable — Android formát. Definováno v XML: <vector> s <path> a <group>. Podporuje animaci prostřednictvím AnimatedVectorDrawable. PDF Vector Assets (iOS) — vektorová PDF v Assets.xcassets. Xcode je kompiluje do textur optimalizovaných pro GPU. SVG a Vector Drawable nepodporují komplexní efekty (blur, gradient mesh). Pro fotky a přechody používejte rastrové PNG/WebP.

Často Kladené Otázky

Jaký je rozdíl mezi vykreslováním CPU a GPU?

CPU vykreslování — sekvenční kreslení na centrálním procesoru. Vhodné pro jednoduchou 2D grafiku a Canvas. GPU vykreslování využívá paralelní architekturu grafického procesoru pro hromadné zpracování vrcholů a pixelů.

Co je Overdraw a jak se mu vyhnout?

Overdraw — kreslení pixelu několikrát za snímek. Nástroje: Debug GPU Overdraw (Android), Color Blended Layers (iOS). Normální: modrá (1x) a zelená (2x). Červená (3x+) — problém.

Co jsou CALayer a CAShapeLayer v iOS?

CALayer — základní třída Core Animation. CAShapeLayer — podtřída pro vektorovou grafiku na GPU. Oba jsou spravovány Core Animation a komponovány v Render Server.

Co jsou Vertex Shader a Fragment Shader?

Vertex Shader — GPU program pro zpracování vrcholů. Fragment Shader — GPU program pro výpočet barev pixelů. Společně implementují grafickou pipeline.

Kdy použít SVG a kdy Vector Drawable?

SVG — standard W3C, není přímo podporováno. Na iOS — PDF vector assets. Na Android — Vector Drawable XML. IT Sectr doporučuje PDF pro iOS a Vector Drawable XML pro Android.

Shrnutí

  • CPU vs GPU: CPU — sekvenční, pro logiku. GPU — paralelní, pro grafiku. Používejte GPU pro animace.
  • Shader: Vertex — transformace vrcholů, Fragment — barva pixelů. Základy grafické pipeline.
  • Overdraw — hlavní nepřítel FPS. Zkontrolujte pomocí Debug GPU Overdraw / Color Blended Layers.
  • CALayer (iOS) — GPU-akcelerované vykreslování. CAShapeLayer — pro vektorové tvary.
  • Offscreen Rendering — nákladný. Vyhněte se zbytečným stínům, cornerRadius + masksToBounds.
  • Vector Drawable (Android) a PDF (iOS) — nejlepší formát pro ikony. Rastrové PNG/WebP — pro fotky.
  • Kompozice — skládání vrstev. Méně vrstev = rychlejší kompozice = vyšší FPS.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt