flutter_gpu_shaders 0.1.3 flutter_gpu_shaders: ^0.1.3 copied to clipboard
Build tools for Flutter GPU shader bundles/libraries.
Build tools for Flutter GPU shader bundles/libraries.
Features #
Use native asset build hooks to import Flutter GPU shader bundle assets.
Getting started #
- This package requires the experimental "native assets" feature to be enabled. Enable it with the following command:
flutter config --enable-native-assets
- Place some Flutter GPU shaders in your project. For this example, we'll assume the existence of two shaders:
shaders/my_cool_shader.vert
andshaders/my_cool_shader.frag
. - Create a shader bundle manifest file in your project. The filename must end with
.shaderbundle.json
. For this example, we'll assume the following file is saved asmy_cool_bundle.shaderbundle.json
:{ "CoolVertex": { "type": "vertex", "file": "shaders/my_cool_shader.vert" }, "CoolFragment": { "type": "fragment", "file": "shaders/my_cool_shader.frag" } }
- Next, define a build hook in your project that builds the shader bundle using
buildShaderBundleJson
. The build hook must be namedhook/build.dart
in your project; this script will be automatically invoked by Flutter when the "native assets" feature is enabled:import 'package:native_assets_cli/native_assets_cli.dart'; import 'package:flutter_gpu_shaders/build.dart'; void main(List<String> args) async { await build(args, (config, output) async { await buildShaderBundleJson( buildConfig: config, buildOutput: output, manifestFileName: 'my_cool_bundle.shaderbundle.json'); }); }
- In your project's
pubspec.yaml
, add an asset import rule to package the built shader bundles (this will become unnecessary once "native assets" supportsDataAsset
in a future release of Flutter):flutter: assets: - build/shaderbundles/*.shaderbundle.json
- You can now import the built shader bundle as a library using
gpu.ShaderLibrary.fromAsset
in your project. For example:import 'package:flutter_gpu/gpu.dart' as gpu; final String _kBaseShaderBundlePath = 'packages/my_project/build/shaderbundles/my_cool_bundle.shaderbundle'; gpu.ShaderLibrary? _baseShaderLibrary = null; gpu.ShaderLibrary get baseShaderLibrary { if (_baseShaderLibrary != null) { return _baseShaderLibrary!; } _baseShaderLibrary = gpu.ShaderLibrary.fromAsset(_kBaseShaderBundlePath); if (_baseShaderLibrary != null) { return _baseShaderLibrary!; } throw Exception( "Failed to load base shader bundle! ($_kBaseShaderBundlePath)"); }