Steps to reproduce
- Clone https://github.com/bartvhooft/flutter-impeller-webview-repro
- Connect Android device with ARM Mali-G52 GPU (tested: Rockchip RK3576, Android 14 API 34)
- Run broken build (Impeller enabled):
flutter run --flavor impellerOn --dart-define=IMPELLER_ENABLED=true
- Observe WebView rendering https://flutter.dev
- Run fixed build (Impeller disabled):
flutter run --flavor impellerOff --dart-define=IMPELLER_ENABLED=false
- Compare WebView rendering
Expected results
WebView renders at full resolution with sharp text and crisp edges.
Actual results
With Impeller enabled, WebView renders blurry/low-resolution. Text is fuzzy,
button edges are soft, content appears upscaled from a lower resolution.
The degradation is only visible on the physical screen — Android screenshots
partially mask the issue (screenshot capture reads from the composited
framebuffer, not the display output).
Setting EnableImpeller=false (Skia fallback) restores correct rendering
with no other change.
Regression: working on Flutter 3.41.7, broken on 3.44.1.
Impeller backend in use: OpenGLES (not Vulkan). Vulkan layers load on the
device but Flutter never initializes a Vulkan context — goes straight to
OpenGLES. Platform view uses SurfaceProducer with legacy composition strategy.
Code sample
https://github.com/bartvhooft/flutter-impeller-webview-repro
Two Android product flavors control EnableImpeller via AndroidManifest.xml:
- impellerOn: EnableImpeller=true (broken)
- impellerOff: EnableImpeller=false (fixed)
Screenshots or Video
Impeller ON

Impeller OFF

Impeller ON

Impeller OFF

Logs
Logs
D vulkan : added global layer 'VK_LAYER_KHRONOS_validation' ...
D libEGL : loaded /vendor/lib64/egl/libGLES_mali.so
I flutter : [IMPORTANT:...android_context_gl_impeller.cc(104)] Using the Impeller rendering backend (OpenGLES).
I PlatformViewsChannel: Using legacy platform view rendering strategy.
I PlatformViewsController: PlatformView is using SurfaceProducer backend
I mali_so : arm_release_ver of this mali_so is 'g15p0-01eac0', rk_so_ver is '4'.
Vulkan layers load but no Vulkan context is initialized — Flutter selects OpenGLES directly.
Flutter Doctor output
Doctor output
[✓] Flutter (Channel stable, 3.44.1, on macOS 26.4.1 25E253 darwin-arm64, locale en-US)
• Flutter version 3.44.1 on channel stable at /Users/bart.vanhooft/.asdf/installs/flutter/3.44.1
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 924134a44c (5 days ago), 2026-05-29 12:13:22 -0400
• Engine revision c416acfeb8
• Dart version 3.12.1
• DevTools version 2.57.0
[✓] Android toolchain - develop for Android devices (Android SDK version 35.0.0)
• Android SDK at /Users/bart.vanhooft/Library/Android/sdk
• Platform android-36, build-tools 35.0.0
• Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 17.0.11+0-17.0.11b1207.24-11852314)
• All Android licenses accepted.
[✓] Connected device (3 available)
• Kindermann TD 12xx (mobile) • android-arm64 • Android 14 (API 34)
• GPU: ARM Mali-G52 (GLES: ARM, Mali-G52, OpenGL ES 3.2 v1.g15p0-01eac0)
• SoC: Rockchip RK3576
Steps to reproduce
flutter run --flavor impellerOn --dart-define=IMPELLER_ENABLED=trueflutter run --flavor impellerOff --dart-define=IMPELLER_ENABLED=falseExpected results
WebView renders at full resolution with sharp text and crisp edges.
Actual results
With Impeller enabled, WebView renders blurry/low-resolution. Text is fuzzy,
button edges are soft, content appears upscaled from a lower resolution.
The degradation is only visible on the physical screen — Android screenshots
partially mask the issue (screenshot capture reads from the composited
framebuffer, not the display output).
Setting EnableImpeller=false (Skia fallback) restores correct rendering
with no other change.
Regression: working on Flutter 3.41.7, broken on 3.44.1.
Impeller backend in use: OpenGLES (not Vulkan). Vulkan layers load on the
device but Flutter never initializes a Vulkan context — goes straight to
OpenGLES. Platform view uses SurfaceProducer with legacy composition strategy.
Code sample
https://github.com/bartvhooft/flutter-impeller-webview-repro
Two Android product flavors control EnableImpeller via AndroidManifest.xml:
Screenshots or Video
Impeller ON

Impeller OFF

Impeller ON

Impeller OFF

Logs
Logs
Vulkan layers load but no Vulkan context is initialized — Flutter selects OpenGLES directly.
Flutter Doctor output
Doctor output