INTRODUCTION
Impeller is a new rendering runtime for Flutter. Impeller precompiles a smaller, simpler set of shaders at Engine build time so that they will not be compiled while an app is running.
Impeller is custom-built for Flutter and It is a significant rewrite of a core part of the Flutter engine, replacing the previous Skia code with a custom runtime that takes full advantage of modern hardware-accelerated graphics APIs such as Metal on iOS and Vulkan on Android. That enables better animations and removes a common source of “yank” — stuttering animations and transitions.
In Short, It delivers silky-smooth animations, considerably raising the bar for what applications can expect from a multiplatform UI toolkit.
Apps that use Impeller can expect to be able to push boundaries further than before while staying locked to 60Hz or faster refresh rates. Most notably, Impeller totally eradicates the need for runtime shader compilation, which is a common source of frame rate ‘jank’ for apps today.
Overall, Impeller has the following objectives:
- Predictable Performance: All shader compilation and reflection is performed offline at build time. All pipeline state objects are built upfront. Caching is explicit and under the control of the engine.
- Instrumentable: All graphics resources (textures, buffers, pipeline state objects, etc..) are tagged and labeled. Animations can be captured and persisted to disk without affecting per-frame rendering performance.
- Portable: Not tied to a specific client rendering API. Shaders are authored once and converted to backend specific formats as necessary.
- Uses Modern Graphics APIs Effectively: Makes heavy use of (but doesn’t depend on) features available in Modern APIs like Metal and Vulkan.
- Makes Effective Use of Concurrency: Can distribute single-frame workloads across multiple threads if necessary.
HOW TO ACTIVATE IMPELLER?
iOS
Impeller is currently available for preview on iOS on the master channel. Users can enable it by passing --enable-impeller
to the flutter run
tool command or by adding the following under the top-level <dict>
tag in an application's Info.plist
file:
<key>FLTEnableImpeller</key>
<true/>
Android
Android support is under active development, and is not yet ready for preview. On the master channel, it may not be working at tip-of-tree. However, users can get an indication of the direction that we’re headed in by experimenting with it in the 3.3 stable release. To enable it on Android, either pass --enable-impeller
to the flutter run
tool command or by adding the following to your AndroidManifest.xml
file under the <application>
tag:
<meta-data
android:name="io.flutter.embedding.android.EnableImpeller"
android:value="true" />
CURRENT STATUS
You can track the up-to-date status and future plans of Impeller
https://github.com/orgs/flutter/projects/21/views/4
EXAMPLE OF IMPELLER
In partnership with the design team at gskinner, Flutter has launched Wonderous, an app built to showcase Flutter’s capacity to deliver high-end, beautiful experiences without caveats. You Watch The Video Below and Download the app from play store.