Interface TextureRegistry.SurfaceProducer

All Superinterfaces:
TextureRegistry.TextureEntry
Enclosing interface:
TextureRegistry

public static interface TextureRegistry.SurfaceProducer extends TextureRegistry.TextureEntry
Uses a Surface to populate the texture.
  • Method Details

    • setSize

      void setSize(int width, int height)
      Specify the size of this texture in physical pixels
    • getWidth

      int getWidth()
      Returns:
      The currently specified width (physical pixels)
    • getHeight

      int getHeight()
      Returns:
      The currently specified height (physical pixels)
    • getSurface

      Surface getSurface()
      Direct access to the surface object.

      When using this API, you will usually need to implement TextureRegistry.SurfaceProducer.Callback and provide it to setCallback(Callback) in order to be notified when an existing surface has been destroyed (such as when the application goes to the background) or a new surface has been created (such as when the application is resumed back to the foreground).

      NOTE: You should not cache the returned surface but instead invoke getSurface each time you need to draw. The surface may change when the texture is resized or has its format changed.

      Returns:
      a Surface to use for a drawing target for various APIs.
    • setCallback

      void setCallback(TextureRegistry.SurfaceProducer.Callback callback)
      Sets a callback that is notified when a previously created Surface returned by getSurface() is no longer valid due to being destroyed, or a new surface is now available (after the previous one was destroyed) for rendering.
      Parameters:
      callback - The callback to notify, or null to remove the callback.
    • scheduleFrame

      void scheduleFrame()
      This method is not officially part of the public API surface and will be deprecated.
    • handlesCropAndRotation

      boolean handlesCropAndRotation()
      Returns whether the current rendering path handles crop and rotation metadata.

      On most newer Android devices (API 29+), a ImageReader backend is used, which has more features, works in new graphic backends directly (such as Impeller's Vulkan backend), and is the Android recommended solution. However, crop and rotation metadata are not handled automatically, and require plugin authors to make appropriate changes ().

      
       void example(SurfaceProducer producer) {
         bool supported = producer.handlesCropAndRotation();
         if (!supported) {
             // Manually rotate/crop, either in the Android plugin or in the Dart framework layer.
         }
       }
       
      Returns:
      true if crop and rotation is handled automatically, false otherwise.