Impeller: кључни појмови, архитектура и предности

Аутор: IT Sectr Објављено: 2026-06-04 Време читања: 9 мин

Impeller је савремени мотор за рендеровање за Flutter, развијен од стране Google-а за замену Skia и отклањање њених фундаменталних проблема: застоја шејдера (jank) при првом рендеровању кадрова, високе потрошње меморије и сложености подршке за различите графичке бекендове. За разлику од Skia, Impeller компилује шејдере унапред (offline), користи SPIR-V као посредну репрезентацију и ради директно са Vulkan, Metal и Direct3D 12. Према подацима Flutter Team (2025), Impeller отклања до 95% застоја шејдера, обезбеђујући предвидивих 60 FPS чак и на уређајима почетног нивоа.

Главно

  • Impeller — нови Flutter мотор за рендеровање који замењује Skia
  • Offline компилација шејдера отклања shader jank при првом рендеровању
  • Архитектура користи SPIR-V као универзалну посредну репрезентацију
  • Бекендови Impeller-а раде директно са Vulkan, Metal и Direct3D 12
  • Перформансе су предвидиве захваљујући претходној обради свих шејдера

Шта је Impeller?

Impeller — је графички мотор за рендеровање отвореног кода, написан у C++, који развија Flutter тим за замену Skia као главног рендерера. Пројекат је најављен 2021. године као одговор на дугогодишњи проблем shader jank-а од кога пати Skia. Impeller није форк Skia — то је потпуно нова имплементација, дизајнирана имајући у виду ограничења мобилних GPU-а и модерних графичких API-ја.

Главна идеја Impeller-а је преношење компилације шејдера у фазу изградње апликације, а не током извршавања. У Skia, шејдери се компилују при првој употреби, када корисник већ интерагује са апликацијом. Impeller компилује све шејдере унапред (offline), пакује их у бинарни формат SPIR-V и испоручује их уз апликацију. Током извршавања, Impeller учитава претходно компиловане шејдере, што елиминише кашњења везана за компилацију.

Impeller такође решава проблем потрошње меморије. Skia ствара бројне привремене објекте (текстуре, бафере) у процесу рендеровања, што доводи до фрагментације меморије на уређајима са ограниченим ресурсима. Impeller користи меморијске базене (memory pools) и поново користи већ додељене ресурсе, смањујући вршну потрошњу меморије за 30–40%.

SPIR-V као основа

SPIR-V (Standard Portable Intermediate Representation) — је посредна репрезентација шејдера коју је развила Khronos Group. Impeller користи SPIR-V као универзални формат за све шејдере. У фази изградње, шејдери на Impeller језику (сопствени C++ DSL за описивање ефеката) се компилују у SPIR-V. Током извршавања, SPIR-V се учитава и преводи у формат специфичан за платформу — MSL за Metal, GLSL за Vulkan или DXIL за Direct3D 12.

Како ради Impeller?

Архитектура Impeller-а се састоји од неколико слојева, од којих сваки обавља строго одређени задатак: обрада листе команди за рендеровање, управљање GPU ресурсима и извршавање шејдера. Ова модуларност омогућава лако додавање подршке за нове графичке API-је.

Доњи слој — је апстракција изнад графичког API-ја (Vulkan, Metal, Direct3D 12). Impeller не подржава OpenGL, јер OpenGL не пружа могућности за ефикасну offline компилацију шејдера. На овом нивоу су имплементирани: управљање баферима врхова, креирање и кеширање пајплајнова (графичких конвејера), синхронизација GPU-а. Пајплајн у Impeller-у — је претходно компиловано GPU стање које укључује шејдере, подешавања растеризације и blending-а. Сви пајплајнови се креирају у фази иницијализације, што елиминише компилацију током рендеровања.

Средњи слој — је систем за управљање ресурсима. Он додељује и поново користи GPU ресурсе: текстуре, бафере, семплере. Уместо креирања нове текстуре при сваком кадру, Impeller одржава базен текстура различитих величина и формата. Меморијски базен аутоматски враћа неискоришћене ресурсе и може да се прошири по потреби, али без фрагментације карактеристичне за Skia.

Горњи слој — је граф рендеровања у који Flutter Engine претвара команде Canvas API-ја. Impeller прима Display List (листу команди за цртање) и гради од ње граф зависности операција. Граф се оптимизује: уклањају се непотребни рендер пролази, спајају се операције са истим GPU стањем. Затим се граф компилује у секвенцу Vulkan/Metal позива користећи претходно креиране пајплајнове.

Ток извршења кадра у Impeller-у

Сваки кадар пролази кроз фиксни конвејер: Display List → граф рендеровања → компилација графа → слање GPU команди. Додатни пролази могу бити додати за пост-ефекте (замућење, сенке) или припрему бафера дубине. Време кадра у Impeller-у је предвидивије него у Skia, јер не постоје недетерминистичка кашњења за компилацију шејдера.

Impeller vs Skia: поређење

Поређење Impeller-а и Skia показује разлике у приступу рендеровању. Skia — је универзална 2D библиотека опште намене, а Impeller — је специјализовани мотор за Flutter, оптимизован за потребе мобилног UI-ја.

ПараметарSkiaImpeller
ШејдериКомпилација у лету (runtime)Offline компилација (build time)
Shader jank50–200 ms за први кадарНе постоји (0 ms)
Формат шејдераСопствени (SkSL)SPIR-V (универзални)
GPU бекендовиOpenGL, Vulkan, MetalVulkan, Metal, Direct3D 12
Потрошња меморијеВисока (привремене текстуре)Базени меморије, до -40%
ПлатформеAndroid, iOS, Web, DesktopAndroid, iOS, Desktop
СтатусСтабилан (главни)Preview (замењује Skia)

Кључна разлика — приступ шејдерима. Skia компилује шејдере у тренутку употребе, стварајући shader jank при првом рендеровању непознатих ефеката. Impeller ово елиминише захваљујући offline компилацији. Такође Skia подржава OpenGL, што је неопходно за веб верзију Flutter-а, али Impeller се одриче OpenGL-а у корист модернијих API-ја, што даје боље перформансе на мобилним уређајима.

Компатибилност са постојећим Flutter кодом

За Flutter апликације, прелазак на Impeller не захтева промену кода. Impeller имплементира исти Canvas API као и Skia, тако да сви виџети, анимације и прилагођена цртања раде исто. Уназад компатибилност је обезбеђена на нивоу Flutter Engine-а — мотор бира рендерер (Skia или Impeller) у фази иницијализације апликације.

Предности Impeller-а

Impeller пружа неколико мерљивих предности у односу на Skia које директно утичу на корисничко искуство и перформансе Flutter апликација.

Отклањање shader jank-а

Shader jank — главни проблем Skia који Impeller у потпуности решава. Када Flutter апликација приказује нови екран са градијентима, маскама или нестандардним блендовима, Skia компилује шејдере током анимације, што доводи до прескакања кадрова. Impeller компилује све шејдере у фази изградње, тако да се први кадар рендерује једнако брзо као и наредни. На уређајима са спорим GPU-ом (MediaTek Helio, Qualcomm 400 series) разлика је посебно приметна — до 200 ms кашњења за сваки нови тип ефекта у Skia наспрам 0 ms у Impeller-у.

Смањење потрошње меморије

Impeller користи ресурсне базене за управљање GPU меморијом. У Skia, сваки кадар може да креира нове текстуре за привремене површине, посебно при рендеровању са транспарентношћу или коришћењу saveLayer. Impeller поново користи текстуре између кадрова, што смањује вршну потрошњу меморије за 30–40% на Android-у и до 25% на iOS-у. Ово је посебно важно за апликације са дугим листама и анимацијама, где је Skia могла да изазове OOM грешке на уређајима са 2 GB RAM-а.

Предвидиве перформансе

У Skia, време рендеровања кадра може да варира у зависности од тога који су шејдери већ компиловани. Први кадар са новим ефектом може да траје 50–200 ms, док наредни — 3–5 ms. Ова непредвидивост отежава оптимизацију и тестирање. Impeller обезбеђује равномерно време кадра, јер су сви шејдери већ компиловани, а алокација меморије је предвидива. Flutter Engine са Impeller-ом може прецизније да израчуна буџет времена за сваки кадар.

Подршка за модерне графичке API-је

Impeller ради директно са Vulkan (Android), Metal (iOS) и Direct3D 12 (Windows), без OpenGL слоја. Ово пружа неколико предности: мање кашњење драјвера (до 50% мање него кроз OpenGL), директну контролу над GPU меморијом и приступ модерним могућностима (tile-based GPU архитектура, GPU-driven rendering). OpenGL се више не развија и његови драјвери на мобилним уређајима често постају уско грло перформанси.

Тренутни статус и планови

Impeller је у активном развоју и доступан је у Flutter Master и Beta каналима. Од Flutter 3.16, Impeller је подразумевано укључен на iOS-у, а на Android-у — опционо преко конфигурационог флага. Потпуна замена Skia са Impeller-ом очекује се у једном од стабилних Flutter издања 2026. године.

iOS: Impeller подразумевано

На iOS-у, Impeller ради преко Metal-а и подразумевано је укључен од Flutter 3.16. Flutter тим препоручује тестирање апликација на Impeller-у и пријављивање проблема. За повратак на Skia користи се Impeller флаг у Info.plist датотеци: FlutterEnableImpeller = NO. Према подацима Flutter Team-а, 92% апликација на iOS-у ради на Impeller-у без видљивих регресија, а перформансе анимација се побољшавају за 25–40%.

Android: опционо

На Android-у, Impeller ради преко Vulkan-а. За укључивање се у AndroidManifest.xml додаје мета-таг: io.flutter.embedded_views_preview. Flutter тим наставља оптимизацију Impeller-а за различите GPU архитектуре (Adreno, Mali, PowerVR). Главни изазов на Android-у је подршка за уређаје без Vulkan-а (Android < 7.0 или стари GPU-ови). За такве уређаје користиће се резервни бекенд на Skia или Impeller са софтверском растеризацијом.

Десктоп и Web

На Windows-у, Impeller ради преко Direct3D 12 (укључен у Flutter Master). На macOS-у и Linux-у — преко Metal-а и Vulkan-а респективно. За Web, Impeller није планиран, јер веб верзија Flutter-а користи CanvasKit (Skia преко WebAssembly-а), а shader jank није критичан проблем због другачијег механизма компилације шејдера у прегледачу. Веб верзија ће наставити да користи Skia.

Путна мапа

Google је објавио путну мапу Impeller-а: 2024 — Impeller подразумевано на iOS-у; 2025 — Impeller подразумевано на Android-у и Windows-у; 2026 — потпуно уклањање Skia из Flutter Engine-а. Након тога, Flutter ће користити Impeller као једини мотор за рендеровање, што ће поједноставити подршку, смањити величину мотора и побољшати перформансе на свим платформама.

Често постављана питања

Како укључити Impeller у Flutter-у?

На iOS-у, Impeller је подразумевано укључен од Flutter 3.16. На Android-у додајте у AndroidManifest.xml мета-таг io.flutter.embedded_views_preview са вредношћу true. На Windows-у користите флаг --enable-impeller при покретању. У свим случајевима може се принудно укључити преко FlutterEngine-а у Dart коду.

Зашто замењивати Skia ако ради?

Skia ради, али има фундаменталне проблеме: shader jank (50–200 ms кашњења за компилацију шејдера), високу потрошњу меморије и ограничења OpenGL архитектуре. Impeller је дизајниран специјално за Flutter и отклања ове проблеме захваљујући offline компилацији шејдера и меморијским базенима.

Да ли Impeller подржава све Flutter виџете?

Да, Impeller имплементира исти Canvas API као и Skia. Сви стандардни Flutter виџети — текст, слике, анимације, прилагођени paint-ови — раде на Impeller-у без промена. Уназад компатибилност је обезбеђена на нивоу Flutter Engine-а и прелазак је транспарентан за програмера.

Могу ли се Skia и Impeller користити истовремено?

Не, апликација користи један мотор за рендеровање истовремено. Избор се врши при иницијализацији Flutter Engine-а преко флага. Пребацивање између Skia и Impeller-а током извршавања апликације је немогуће — рендерер се фиксира пре креирања прве инстанце FlutterEngine-а.

Шта ће бити са Skia након увођења Impeller-а?

Skia ће наставити да постоји као самостална Google библиотека за Chrome, Android и друге пројекте. У Flutter-у, Skia ће бити замењена Impeller-ом као главним рендерером. Skia ће остати за веб верзију Flutter-а (преко CanvasKit-а) и као резервна опција за уређаје без подршке за Vulkan/Metal.

Резиме

  • Impeller — нови Flutter мотор за рендеровање, који отклања shader jank кроз offline компилацију шејдера
  • Архитектура заснована на SPIR-V, претходно компилованим пајплајновима и меморијским базенима
  • Поређење са Skia: без кашњења при првом рендеровању, смањење меморије за 30–40%
  • Бекендови подржавају Vulkan, Metal и Direct3D 12 без застарелог OpenGL-а
  • Статус на iOS-у — подразумевано, на Android-у и Windows-у — опционо (Flutter 3.16+)
  • Компатибилност потпуна: сви постојећи Flutter виџети раде без измена кода
  • Користите Impeller у новим Flutter пројектима и мигрирајте постојеће за отклањање кашњења

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође