Skip to content

Windows

Windows gets a Win32 plugin over the same renderer core, speaking the same channel with the same method names, so OrblitView and every other Dart caller works there unchanged. CMake runs the setup when Flutter configures the build, through bash, which is the one thing here Flutter doesn’t already ask for.

Windows 10 or 11, on x64 Not on Arm
Visual Studio 2022 or newer With the “Desktop development with C++” workload, as flutter doctor asks for. The renderer is C++20 and builds with MSVC. CI compiles it with Visual Studio 2026, and 2022 hasn’t been tried
Git for Windows For its bash, which has to be on PATH. See below
Developer Mode Flutter needs it to link plugins. start ms-settings:developers opens the setting

The setup script is bash, and CMake looks for bash on PATH. If it finds none, the build stops with:

No bash on PATH. packages/orblit_filament/windows/setup.sh stages the
Filament release and compiles the materials, and needs the bash that
Git for Windows installs.

Git for Windows does install a bash, in C:\Program Files\Git\bin. As far as we know, its installer’s default PATH option only adds Git\cmd, which has git and no bash. So a machine where git works can still hit that error. For the current PowerShell session:

Terminal window
$env:Path = "C:\Program Files\Git\bin;$env:Path"
where.exe bash

To keep it, add the same folder to Path under “Edit the system environment variables”.

where.exe bash should list Git’s first. If the first one is C:\Windows\System32\bash.exe, that’s WSL’s launcher, and it would run the setup inside Linux, where it doesn’t belong. Nobody has seen what happens then, so put Git’s folder ahead of it.

CMake remembers the bash it found. If it has already found the wrong one, run flutter clean after fixing PATH.

Terminal window
flutter run -d windows

The first configure is the slow one. It downloads Filament’s Windows release, about 810 MB, and compiles the materials for Vulkan and OpenGL with the release’s own matc.exe.

At runtime the renderer asks for Vulkan first, through vulkan-1.dll, and falls back to OpenGL through opengl32.dll. It only falls back when vulkan-1.dll is missing or building Filament’s engine throws. On CI’s runner the DLL loads, then Filament panics creating the Vulkan instance on its own driver thread, where nothing can catch it, so OpenGL is never tried.

Each frame is copied into a flutter::PixelBufferTexture on its way to Flutter. The copy-free route is reported to crash under Impeller, and nobody has been able to check that on a real machine, so the copy stays until someone can.

Google publishes Filament’s Windows release for x64 and nothing else, so there’s nothing to link an arm64 build against. On Windows on Arm, Flutter builds for arm64, and the plugin stops at configure time with a message saying to build with --target-platform windows-x64. That advice is wrong for now: flutter build windows has no such flag in Flutter 3.47, because it builds for whatever machine it’s on. So Windows on Arm can’t build Orblit’s renderer yet.