Skip to content

Flutter GPU

Brandon DeRosier edited this page Dec 29, 2023 · 7 revisions

Flutter GPU (previously referred to as "Dart GPU" or "Impeller Dart") is an effort to expose a low level graphics API in the Flutter Framework.

Design doc: https://flutter.dev/go/impeller-dart

Flutter GPU's runtime is a thin wrapper over Impeller's HAL, from which custom renderers may be entirely built using Dart. Just like with Impeller, Flutter GPU shader bundles are compiled ahead of time using impellerc. As such, Flutter GPU is only available on platforms that support Impeller.

Dart FFI

Under the hood, the API communicates with Flutter Engine via Dart FFI, calling symbols publicly exported by libflutter and/or embedders. These symbols are prefixed with InternalFlutterGpu, and are considered unstable. Direct usage of the exported symbols is not supported and will break without notice; the only supported way to use Flutter GPU is by importing package:flutter_gpu.

Try out Flutter GPU

Once released, Flutter GPU will be shipped as part of the Flutter SDK in the form of a Dart package called flutter_gpu. An early implementation of the flutter_gpu package is being developed under the lib/gpu directory of the Flutter Engine repository.

Caution

All aspects of Flutter GPU are subject to breakage or removal at any time without prior deprecation notice or viable feature replacement. DO NOT rely on Flutter GPU for production projects at this time, but DO have fun playing with it and sharing your experiments with the community.

Flutter GPU is currently unfinished, extremely experimental, and not well documented. bdero is actively developing and testing Flutter GPU against the MacOS desktop embedder; shader compilation and import likely don't function correctly on other platforms yet. However, if you wish to experiment with Flutter GPU, it is possible to do so without a custom Engine build:

  1. Update your Flutter checkout to the latest version in the master channel.
  2. Clone Flutter Engine and checkout the Engine commit that the Flutter master channel is currently pinned to. This can be found in the bin/internal/engine.version file of the main Flutter repository.
    git clone https://github.com/flutter/engine.git
    cd engine
    git reset --hard [PINNED_ENGINE_COMMIT]
  3. Create a new Flutter project using the Flutter tool and add flutter_gpu as a dependency in pubspec.yaml with a local path pointing to the lib/gpu directory within the Flutter Engine repository cloned in step 2. For example:
    dependencies:
      flutter:
        sdk: flutter
      flutter_gpu:
        path: ../engine/src/flutter/lib/gpu
  4. From here, you can import the API and begin using it.
    import 'package:flutter_gpu/gpu.dart' as gpu;
    Check out this examples repository, which includes an example of drawing a triangle, among other things.

Reporting bugs

If you run into issues while using Flutter GPU, please file a bug using the standard bug report template. Additionally, mention "Flutter GPU" in the title, label the bug with the e: impeller label, and tag bdero in the issue description.

Questions or feedback?

If you have non-bug report questions surrounding Flutter GPU, there are several ways you can reach out to the developer:

  • Create a thread in the #help channel of the Discord server. Place "Flutter GPU" in the title of the thread and tag @bdero in the message.
  • Send a Twitter DM to @algebrandon.

Flutter Wiki

Process

Framework repo

The Flutter CLI Tool

Engine repo

Packages repo

Engineering Productivity

User documentation

Clone this wiki locally