Skip to content

Impeller inconsistency when using ImageShader in CustomPaint #165205

@Erfa

Description

@Erfa

Steps to reproduce

I have a visual effect where I show an animated 3D cube in Flutter, projected to 2D and with images rendered as its sides using ImageShader in a CustomPaint. This used to work, but starting in a recent Flutter version (maybe 3.29.0?) it does not work in Impeller anymore.

Expected results

I would expect the result between Impeller and --no-enable-impeller to be consistent.

Actual results

Impeller has a new behavior different from --no-enable-impeller.

Code sample

Code sample

Here's a minimal repro of it: https://github.com/Erfa/impeller_inconsistency

Screenshots or Video

Screenshots / Video demonstration
Impeller --no-enable-impeller
impeller.mp4
no-impeller.mp4

Logs

Logs
Launching lib\main.dart on sdk gphone64 x86 64 in debug mode...
Running Gradle task 'assembleDebug'...                              7.8s
√ Built build\app\outputs\flutter-apk\app-debug.apk
Installing build\app\outputs\flutter-apk\app-debug.apk...          393ms
I/flutter ( 8695): [IMPORTANT:flutter/shell/platform/android/android_context_gl_impeller.cc(94)] Using the Impeller rendering backend (OpenGLES).
I/Choreographer( 8695): Skipped 82 frames!  The application may be doing too much work on its main thread.
I/WindowExtensionsImpl( 8695): Initializing Window Extensions, vendor API level=6, activity embedding enabled=true
I/r_inconsistency( 8695): Compiler allocated 4968KB to compile void android.view.ViewRootImpl.performTraversals()
I/r_inconsistency( 8695): Compiler allocated 5155KB to compile void android.view.ViewRootImpl.performTraversals()
W/HWUI    ( 8695): Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
W/HWUI    ( 8695): Failed to initialize 101010-2 format, error = EGL_SUCCESS
I/Gralloc4( 8695): mapper 4.x is not supported
Syncing files to device sdk gphone64 x86 64...                      58ms
E/libEGL  ( 8695): called unimplemented OpenGL ES API

Flutter run key commands.
r Hot reload.
R Hot restart.
h List all available interactive commands.
d Detach (terminate "flutter run" but leave application running).
c Clear the screen
q Quit (terminate the application on the device).

A Dart VM Service on sdk gphone64 x86 64 is available at: http://127.0.0.1:52431/E_mc4H_0p2E=/
I/r_inconsistency( 8695): Compiler allocated 5155KB to compile void android.view.ViewRootImpl.performTraversals()
The Flutter DevTools debugger and profiler on sdk gphone64 x86 64 is available at:
http://127.0.0.1:9101?uri=http://127.0.0.1:52431/E_mc4H_0p2E=/
E/libEGL  ( 8695): called unimplemented OpenGL ES API
D/EGL_emulation( 8695): app_time_stats: avg=3.72ms min=0.55ms max=78.42ms count=57
E/libEGL  ( 8695): called unimplemented OpenGL ES API
D/EGL_emulation( 8695): app_time_stats: avg=0.78ms min=0.54ms max=2.02ms count=61
E/libEGL  ( 8695): called unimplemented OpenGL ES API
D/EGL_emulation( 8695): app_time_stats: avg=1.08ms min=0.60ms max=11.67ms count=58
E/libEGL  ( 8695): called unimplemented OpenGL ES API
D/EGL_emulation( 8695): app_time_stats: avg=0.93ms min=0.56ms max=3.09ms count=61
E/libEGL  ( 8695): called unimplemented OpenGL ES API
D/ProfileInstaller( 8695): Installing profile for com.example.impeller_inconsistency
D/EGL_emulation( 8695): app_time_stats: avg=0.91ms min=0.55ms max=2.06ms count=57
E/libEGL  ( 8695): called unimplemented OpenGL ES API
D/EGL_emulation( 8695): app_time_stats: avg=0.85ms min=0.58ms max=2.25ms count=61

Application finished.

Flutter Doctor output

Doctor output
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 3.29.2, on Microsoft Windows [Version 10.0.26100.3476], locale en-SE)
[√] Windows Version (11 Pro 64-bit, 24H2, 2009)
[!] Android toolchain - develop for Android devices (Android SDK version 35.0.0)
    X cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    X Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/to/windows-android-setup for more details.
[√] Chrome - develop for the web
[√] Visual Studio - develop Windows apps (Visual Studio Community 2022 17.9.1)
[√] Android Studio (version 2024.1)
[!] Android Studio (version 2024.2)
    X Unable to determine bundled Java version.
[√] VS Code (version 1.98.2)
[√] Connected device (4 available)
[√] Network resources

! Doctor found issues in 2 categories.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work listc: regressionIt was better in the past than it is nowe: impellerImpeller rendering backend issues and features requestsengineflutter/engine related. See also e: labels.found in release: 3.29Found to occur in 3.29found in release: 3.31Found to occur in 3.31has reproducible stepsThe issue has been confirmed reproducible and is ready to work onr: fixedIssue is closed as already fixed in a newer versionteam-engineOwned by Engine teamtriaged-engineTriaged by Engine team

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions