Saltar al contenido principal

Motor de renderizado Impeller

¿Qué es Impeller y cómo habilitarlo?

¿Qué es Impeller?

#

Impeller proporciona un nuevo tiempo de ejecución de renderizado para Flutter. Impeller precompila un conjunto más pequeño y simple de shaders al momento de compilación del motor para que no se compilen en tiempo de ejecución.

Para ver una introducción en video a Impeller, consulta la siguiente charla de Google I/O 2023.

Ver en YouTube en una nueva pestaña: "Introducing Impeller, Flutter's new rendering engine"

Impeller tiene los siguientes objetivos:

  • Rendimiento predecible: Impeller compila todos los shaders y la reflexión fuera de línea en el momento de la compilación. Construye todos los objetos de estado del pipeline por adelantado. El motor controla el almacenamiento en caché y realiza el almacenamiento en caché de forma explícita.
  • Instrumentable: Impeller etiqueta e identifica todos los recursos gráficos, como texturas y búferes. Puede capturar y persistir animaciones en el disco sin afectar el rendimiento de renderizado por fotograma.
  • Portátil: Flutter no vincula a Impeller con una API de renderizado de cliente específica. Puedes crear shaders una vez y convertirlos a formatos específicos del backend, según sea necesario.
  • Aprovecha las API de gráficos modernas: Impeller utiliza, pero no depende de, las características disponibles en las API modernas como Metal y Vulkan.
  • Aprovecha la concurrencia: Impeller puede distribuir cargas de trabajo de un solo fotograma a través de múltiples hilos, si es necesario.

Disponibilidad

#

¿Dónde puedes usar Impeller? Para obtener información detallada, consulta la página ¿Puedo usar Impeller?.

iOS

#

Impeller es el único motor de renderizado compatible en iOS sin capacidad para cambiar a Skia.

Android

#

Impeller está disponible y habilitado de forma predeterminada en Android API 29+. En dispositivos que ejecutan versiones anteriores de Android o que no son compatibles con Vulkan, Impeller recurre al renderizador OpenGL heredado. No es necesaria ninguna acción por tu parte para este comportamiento alternativo.

  • Para deshabilitar Impeller al depurar, pasa --no-enable-impeller al comando flutter run.

    flutter run --no-enable-impeller
    
  • Para deshabilitar Impeller al desplegar tu aplicación, agrega la siguiente configuración al archivo AndroidManifest.xml de tu proyecto bajo la etiqueta <application>:

xml
<meta-data
    android:name="io.flutter.embedding.android.EnableImpeller"
    android:value="false" />

Web

#

Flutter en la web ofrece dos renderizadores -- canvaskit y skwasm -- los cuales actualmente usan Skia. Podrían usar Impeller en el futuro.

macOS

#

Puedes probar Impeller para macOS detrás de una bandera. En una versión futura, se eliminará la capacidad de optar por no usar Impeller.

Para habilitar Impeller en macOS al depurar, pasa --enable-impeller al comando flutter run.

flutter run --enable-impeller

Para habilitar Impeller en macOS al desplegar tu aplicación, añade las siguientes etiquetas debajo de la etiqueta de nivel superior <dict> en el archivo Info.plist de tu aplicación.

xml
  <key>FLTEnableImpeller</key>
  <true />

Errores y problemas

#

El equipo continúa mejorando el soporte de Impeller. Si encuentras problemas de rendimiento o fidelidad con Impeller en cualquier plataforma, registra un problema en el rastreador de GitHub. Prefija el título del problema con [Impeller] e incluye un pequeño caso de prueba reproducible.

Por favor, incluye la siguiente información cuando envíes un problema para Impeller:

  • El dispositivo en el que estás ejecutando la aplicación, incluyendo la información del chip.
  • Capturas de pantalla o grabaciones de cualquier problema visible.
  • Una exportación del trace de rendimiento. Comprime el archivo en un zip y adjúntalo al problema de GitHub.

Arquitectura

#

Para conocer más detalles sobre el diseño y la arquitectura de Impeller, consulta el archivo README.md en el árbol de fuentes.

Información adicional

#