| # Frequently Asked Questions |
| |
| * How do you run `impeller_unittests` with Playgrounds enabled? |
| * Playgrounds in the `impeller_unittests` harness can be enabled in one of |
| three ways: |
| * Edit `gn args` directly and add `impeller_enable_playground = true`. |
| * Add the `--enable-impeller-playground` flag to your `./flutter/tools/gn` |
| invocation. |
| * Set the `FLUTTER_IMPELLER_ENABLE_PLAYGROUND` to `1` before invoking |
| `./flutter/tools/gn`. Only do this if you frequently work with Playgrounds |
| and don't want to have to set the flags manually. Also, it would be a bad |
| idea to set this environment variable on CI. |
| * Does Impeller use Skia for rendering? |
| * No. Impeller has no direct dependencies on Skia. |
| * When running with Impeller, Flutter does not create a Skia graphics context. |
| * However, while Impeller still performs text rendering, text layout and |
| shaping needs to be done by a separate component. This component happens to |
| be SkParagraph which is part of Skia. |
| * Similarly, Impeller does not perform image decompression. Flutter uses a |
| standard set of codecs wrapped by Skia before querying the system supplied |
| image formats. |
| * So, while Impeller does not use nor is it a wrapper for Skia, some Skia |
| components are still used by Flutter when rendering using Impeller. |
| * Is Impeller going to be supported on the Web? |
| * The current priority for Impeller is to be amazing on all platforms targeted |
| by the C++ engine. This includes iOS, Android, desktops, and, all Embedder |
| API users. This would be by building Metal, Open GL, Open GL ES, and, Vulkan |
| rendering backends. |
| * The Open GL ES backend ought to work fine to target WebGL/WebGL2 and the |
| team can fix any issues found in such uses of the backend. |
| * However, in Flutter, Impeller sits behind the Display List interface in the |
| C++ engine. Display lists apply optimizations to the Flutter rendering |
| intent. But, more importantly for Impeller, they also provide a generic |
| interface with the ability to specify "dispatchers" to different rendering |
| packages. Today, the engine has Skia and Impeller dispatchers for display |
| lists. |
| * The web engine is unique in that it doesn't use any C++ engine components. |
| This includes the display lists mechanism. Instead, it interfaces directly |
| with Skia via the CanvasKit package. |
| * Updating the web engine to interface directly with Impeller is a non-goal at |
| this time. It is a significant undertaking (compared to a flag to swap |
| dispatchers that already exists) and also bypasses display list |
| optimizations. |
| * For this added implementation complexity, Web support has not been a |
| priority at this time for the small team working on Impeller. |
| * We are aware that these priorities might change in the future. There have |
| been sanity checks to ensure that the Impeller API can be ported to WASM and |
| also that Impeller shaders can be [compiled to WGSL](https://github.com/chinmaygarde/wgsl_sandbox) |
| for eventual WebGPU support. |
| * How will Impeller affect the way in which Flutter applications are created and |
| packaged? |
| * It won't. |
| * Impeller, like Skia, is an implementation detail of the Flutter Engine. |
| Using a different rendering package will not affect the way in which the |
| Flutter Engine is used. |
| * Like with Skia today, none of Impellers symbols will be exposed from the |
| Flutter Engine dynamic library. |
| * The binary size overhead of Impeller is around 100 KB per architecture. This |
| includes all precompiled shaders. |
| * Impeller is compiled into the Flutter engine. It is currently behind a flag |
| as development progresses. |
| * How do I enable Impeller to try it out myself? |
| * See the instructions in the README on how to [try Impeller in |
| Flutter](https://github.com/flutter/engine/tree/main/impeller#try-impeller-in-flutter). |