// AUTO GENERATED FILE, DO NOT EDIT.
//
// Generated by `package:ffigen`.
// ignore_for_file: type=lint
import 'dart:ffi' as ffi;

@ffi.Native<
        ffi.Pointer<ffi.Void> Function(
            ffi.Pointer<ffi.Void>,
            ffi.Pointer<ResourceLoaderWrapper>,
            ffi.Pointer<ffi.Void>,
            ffi.Pointer<ffi.Char>)>(
    symbol: 'create_filament_viewer', assetId: 'flutter_filament_plugin')
external ffi.Pointer<ffi.Void> create_filament_viewer(
  ffi.Pointer<ffi.Void> context,
  ffi.Pointer<ResourceLoaderWrapper> loader,
  ffi.Pointer<ffi.Void> platform,
  ffi.Pointer<ffi.Char> uberArchivePath,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'destroy_filament_viewer', assetId: 'flutter_filament_plugin')
external void destroy_filament_viewer(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<
        ffi.Pointer<ResourceLoaderWrapper> Function(
            LoadFilamentResourceFromOwner,
            FreeFilamentResourceFromOwner,
            ffi.Pointer<ffi.Void>)>(
    symbol: 'make_resource_loader', assetId: 'flutter_filament_plugin')
external ffi.Pointer<ResourceLoaderWrapper> make_resource_loader(
  LoadFilamentResourceFromOwner loadFn,
  FreeFilamentResourceFromOwner freeFn,
  ffi.Pointer<ffi.Void> owner,
);

@ffi.Native<ffi.Pointer<ffi.Void> Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'get_scene_manager', assetId: 'flutter_filament_plugin')
external ffi.Pointer<ffi.Void> get_scene_manager(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>, ffi.IntPtr, ffi.Uint32, ffi.Uint32)>(
    symbol: 'create_render_target', assetId: 'flutter_filament_plugin')
external void create_render_target(
  ffi.Pointer<ffi.Void> viewer,
  int texture,
  int width,
  int height,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'clear_background_image', assetId: 'flutter_filament_plugin')
external void clear_background_image(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Char>, ffi.Bool)>(
    symbol: 'set_background_image', assetId: 'flutter_filament_plugin')
external void set_background_image(
  ffi.Pointer<ffi.Void> viewer,
  ffi.Pointer<ffi.Char> path,
  bool fillHeight,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>, ffi.Float, ffi.Float, ffi.Bool)>(
    symbol: 'set_background_image_position', assetId: 'flutter_filament_plugin')
external void set_background_image_position(
  ffi.Pointer<ffi.Void> viewer,
  double x,
  double y,
  bool clamp,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>, ffi.Float, ffi.Float, ffi.Float, ffi.Float)>(
    symbol: 'set_background_color', assetId: 'flutter_filament_plugin')
external void set_background_color(
  ffi.Pointer<ffi.Void> viewer,
  double r,
  double g,
  double b,
  double a,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Int)>(
    symbol: 'set_tone_mapping', assetId: 'flutter_filament_plugin')
external void set_tone_mapping(
  ffi.Pointer<ffi.Void> viewer,
  int toneMapping,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Float)>(
    symbol: 'set_bloom', assetId: 'flutter_filament_plugin')
external void set_bloom(
  ffi.Pointer<ffi.Void> viewer,
  double strength,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Char>)>(
    symbol: 'load_skybox', assetId: 'flutter_filament_plugin')
external void load_skybox(
  ffi.Pointer<ffi.Void> viewer,
  ffi.Pointer<ffi.Char> skyboxPath,
);

@ffi.Native<
    ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Char>,
        ffi.Float)>(symbol: 'load_ibl', assetId: 'flutter_filament_plugin')
external void load_ibl(
  ffi.Pointer<ffi.Void> viewer,
  ffi.Pointer<ffi.Char> iblPath,
  double intensity,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Float>)>(
    symbol: 'rotate_ibl', assetId: 'flutter_filament_plugin')
external void rotate_ibl(
  ffi.Pointer<ffi.Void> viewer,
  ffi.Pointer<ffi.Float> rotationMatrix,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'remove_skybox', assetId: 'flutter_filament_plugin')
external void remove_skybox(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'remove_ibl', assetId: 'flutter_filament_plugin')
external void remove_ibl(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<
    EntityId Function(
        ffi.Pointer<ffi.Void>,
        ffi.Uint8,
        ffi.Float,
        ffi.Float,
        ffi.Float,
        ffi.Float,
        ffi.Float,
        ffi.Float,
        ffi.Float,
        ffi.Float,
        ffi.Bool)>(symbol: 'add_light', assetId: 'flutter_filament_plugin')
external int add_light(
  ffi.Pointer<ffi.Void> viewer,
  int type,
  double colour,
  double intensity,
  double posX,
  double posY,
  double posZ,
  double dirX,
  double dirY,
  double dirZ,
  bool shadows,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId)>(
    symbol: 'remove_light', assetId: 'flutter_filament_plugin')
external void remove_light(
  ffi.Pointer<ffi.Void> viewer,
  int entityId,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'clear_lights', assetId: 'flutter_filament_plugin')
external void clear_lights(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<
    EntityId Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Char>,
        ffi.Int)>(symbol: 'load_glb', assetId: 'flutter_filament_plugin')
external int load_glb(
  ffi.Pointer<ffi.Void> sceneManager,
  ffi.Pointer<ffi.Char> assetPath,
  int numInstances,
);

@ffi.Native<
        EntityId Function(
            ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Void>, ffi.Size)>(
    symbol: 'load_glb_from_buffer', assetId: 'flutter_filament_plugin')
external int load_glb_from_buffer(
  ffi.Pointer<ffi.Void> sceneManager,
  ffi.Pointer<ffi.Void> data,
  int length,
);

@ffi.Native<
        EntityId Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Char>,
            ffi.Pointer<ffi.Char>)>(
    symbol: 'load_gltf', assetId: 'flutter_filament_plugin')
external int load_gltf(
  ffi.Pointer<ffi.Void> sceneManager,
  ffi.Pointer<ffi.Char> assetPath,
  ffi.Pointer<ffi.Char> relativePath,
);

@ffi.Native<EntityId Function(ffi.Pointer<ffi.Void>, EntityId)>(
    symbol: 'create_instance', assetId: 'flutter_filament_plugin')
external int create_instance(
  ffi.Pointer<ffi.Void> sceneManager,
  int id,
);

@ffi.Native<ffi.Int Function(ffi.Pointer<ffi.Void>, EntityId)>(
    symbol: 'get_instance_count', assetId: 'flutter_filament_plugin')
external int get_instance_count(
  ffi.Pointer<ffi.Void> sceneManager,
  int entityId,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>, EntityId, ffi.Pointer<EntityId>)>(
    symbol: 'get_instances', assetId: 'flutter_filament_plugin')
external void get_instances(
  ffi.Pointer<ffi.Void> sceneManager,
  int entityId,
  ffi.Pointer<EntityId> out,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'set_main_camera', assetId: 'flutter_filament_plugin')
external void set_main_camera(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<EntityId Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'get_main_camera', assetId: 'flutter_filament_plugin')
external int get_main_camera(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<
        ffi.Bool Function(
            ffi.Pointer<ffi.Void>, EntityId, ffi.Pointer<ffi.Char>)>(
    symbol: 'set_camera', assetId: 'flutter_filament_plugin')
external bool set_camera(
  ffi.Pointer<ffi.Void> viewer,
  int asset,
  ffi.Pointer<ffi.Char> nodeName,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Bool)>(
    symbol: 'set_view_frustum_culling', assetId: 'flutter_filament_plugin')
external void set_view_frustum_culling(
  ffi.Pointer<ffi.Void> viewer,
  bool enabled,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            ffi.Uint64,
            ffi.Pointer<ffi.Void>,
            ffi.Pointer<
                ffi.NativeFunction<
                    ffi.Void Function(ffi.Pointer<ffi.Void> buf, ffi.Size size,
                        ffi.Pointer<ffi.Void> data)>>,
            ffi.Pointer<ffi.Void>)>(
    symbol: 'render', assetId: 'flutter_filament_plugin')
external void render(
  ffi.Pointer<ffi.Void> viewer,
  int frameTimeInNanos,
  ffi.Pointer<ffi.Void> pixelBuffer,
  ffi.Pointer<
          ffi.NativeFunction<
              ffi.Void Function(ffi.Pointer<ffi.Void> buf, ffi.Size size,
                  ffi.Pointer<ffi.Void> data)>>
      callback,
  ffi.Pointer<ffi.Void> data,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Void>,
            ffi.Uint32, ffi.Uint32)>(
    symbol: 'create_swap_chain', assetId: 'flutter_filament_plugin')
external void create_swap_chain(
  ffi.Pointer<ffi.Void> viewer,
  ffi.Pointer<ffi.Void> window,
  int width,
  int height,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'destroy_swap_chain', assetId: 'flutter_filament_plugin')
external void destroy_swap_chain(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Float)>(
    symbol: 'set_frame_interval', assetId: 'flutter_filament_plugin')
external void set_frame_interval(
  ffi.Pointer<ffi.Void> viewer,
  double interval,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>, ffi.Uint32, ffi.Uint32, ffi.Float)>(
    symbol: 'update_viewport_and_camera_projection',
    assetId: 'flutter_filament_plugin')
external void update_viewport_and_camera_projection(
  ffi.Pointer<ffi.Void> viewer,
  int width,
  int height,
  double scaleFactor,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'scroll_begin', assetId: 'flutter_filament_plugin')
external void scroll_begin(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<
    ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Float, ffi.Float,
        ffi.Float)>(symbol: 'scroll_update', assetId: 'flutter_filament_plugin')
external void scroll_update(
  ffi.Pointer<ffi.Void> viewer,
  double x,
  double y,
  double z,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'scroll_end', assetId: 'flutter_filament_plugin')
external void scroll_end(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<
    ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Float, ffi.Float,
        ffi.Bool)>(symbol: 'grab_begin', assetId: 'flutter_filament_plugin')
external void grab_begin(
  ffi.Pointer<ffi.Void> viewer,
  double x,
  double y,
  bool pan,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Float, ffi.Float)>(
    symbol: 'grab_update', assetId: 'flutter_filament_plugin')
external void grab_update(
  ffi.Pointer<ffi.Void> viewer,
  double x,
  double y,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'grab_end', assetId: 'flutter_filament_plugin')
external void grab_end(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<
    ffi.Void Function(
        ffi.Pointer<ffi.Void>,
        EntityId,
        ffi.Pointer<ffi.Char>,
        ffi.Pointer<ffi.Float>,
        ffi.Int)>(symbol: 'apply_weights', assetId: 'flutter_filament_plugin')
external void apply_weights(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Char> entityName,
  ffi.Pointer<ffi.Float> weights,
  int count,
);

@ffi.Native<
        ffi.Bool Function(
            ffi.Pointer<ffi.Void>, EntityId, ffi.Pointer<ffi.Float>, ffi.Int)>(
    symbol: 'set_morph_target_weights', assetId: 'flutter_filament_plugin')
external bool set_morph_target_weights(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Float> morphData,
  int numWeights,
);

@ffi.Native<
        ffi.Bool Function(
            ffi.Pointer<ffi.Void>,
            EntityId,
            ffi.Pointer<ffi.Float>,
            ffi.Pointer<ffi.Int>,
            ffi.Int,
            ffi.Int,
            ffi.Float)>(
    symbol: 'set_morph_animation', assetId: 'flutter_filament_plugin')
external bool set_morph_animation(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Float> morphData,
  ffi.Pointer<ffi.Int> morphIndices,
  int numMorphTargets,
  int numFrames,
  double frameLengthInMs,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId)>(
    symbol: 'reset_to_rest_pose', assetId: 'flutter_filament_plugin')
external void reset_to_rest_pose(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            EntityId,
            ffi.Pointer<ffi.Float>,
            ffi.Int,
            ffi.Pointer<ffi.Char>,
            ffi.Pointer<ffi.Pointer<ffi.Char>>,
            ffi.Int,
            ffi.Float,
            ffi.Bool)>(
    symbol: 'add_bone_animation', assetId: 'flutter_filament_plugin')
external void add_bone_animation(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Float> frameData,
  int numFrames,
  ffi.Pointer<ffi.Char> boneName,
  ffi.Pointer<ffi.Pointer<ffi.Char>> meshNames,
  int numMeshTargets,
  double frameLengthInMs,
  bool isModelSpace,
);

@ffi.Native<
        ffi.Bool Function(
            ffi.Pointer<ffi.Void>,
            EntityId,
            ffi.Pointer<ffi.Char>,
            ffi.Pointer<ffi.Float>,
            ffi.Pointer<ffi.Char>)>(
    symbol: 'set_bone_transform', assetId: 'flutter_filament_plugin')
external bool set_bone_transform(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Char> entityName,
  ffi.Pointer<ffi.Float> transform,
  ffi.Pointer<ffi.Char> boneName,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId, ffi.Int, ffi.Bool,
            ffi.Bool, ffi.Bool, ffi.Float)>(
    symbol: 'play_animation', assetId: 'flutter_filament_plugin')
external void play_animation(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  int index,
  bool loop,
  bool reverse,
  bool replaceActive,
  double crossfade,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId, ffi.Int, ffi.Int)>(
    symbol: 'set_animation_frame', assetId: 'flutter_filament_plugin')
external void set_animation_frame(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  int animationIndex,
  int animationFrame,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId, ffi.Int)>(
    symbol: 'stop_animation', assetId: 'flutter_filament_plugin')
external void stop_animation(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  int index,
);

@ffi.Native<ffi.Int Function(ffi.Pointer<ffi.Void>, EntityId)>(
    symbol: 'get_animation_count', assetId: 'flutter_filament_plugin')
external int get_animation_count(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>, EntityId, ffi.Pointer<ffi.Char>, ffi.Int)>(
    symbol: 'get_animation_name', assetId: 'flutter_filament_plugin')
external void get_animation_name(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Char> outPtr,
  int index,
);

@ffi.Native<ffi.Float Function(ffi.Pointer<ffi.Void>, EntityId, ffi.Int)>(
    symbol: 'get_animation_duration', assetId: 'flutter_filament_plugin')
external double get_animation_duration(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  int index,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId,
            ffi.Pointer<ffi.Char>, ffi.Pointer<ffi.Char>, ffi.Int)>(
    symbol: 'get_morph_target_name', assetId: 'flutter_filament_plugin')
external void get_morph_target_name(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Char> meshName,
  ffi.Pointer<ffi.Char> outPtr,
  int index,
);

@ffi.Native<
        ffi.Int Function(
            ffi.Pointer<ffi.Void>, EntityId, ffi.Pointer<ffi.Char>)>(
    symbol: 'get_morph_target_name_count', assetId: 'flutter_filament_plugin')
external int get_morph_target_name_count(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Char> meshName,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId)>(
    symbol: 'remove_entity', assetId: 'flutter_filament_plugin')
external void remove_entity(
  ffi.Pointer<ffi.Void> viewer,
  int asset,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'clear_entities', assetId: 'flutter_filament_plugin')
external void clear_entities(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<
        ffi.Bool Function(
            ffi.Pointer<ffi.Void>,
            EntityId,
            ffi.Pointer<ffi.Char>,
            ffi.Int,
            ffi.Float,
            ffi.Float,
            ffi.Float,
            ffi.Float)>(
    symbol: 'set_material_color', assetId: 'flutter_filament_plugin')
external bool set_material_color(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Char> meshName,
  int materialIndex,
  double r,
  double g,
  double b,
  double a,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId)>(
    symbol: 'transform_to_unit_cube', assetId: 'flutter_filament_plugin')
external void transform_to_unit_cube(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId, ffi.Float, ffi.Float,
            ffi.Float, ffi.Bool)>(
    symbol: 'queue_position_update', assetId: 'flutter_filament_plugin')
external void queue_position_update(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  double x,
  double y,
  double z,
  bool relative,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId, ffi.Float, ffi.Float,
            ffi.Float, ffi.Float, ffi.Float, ffi.Bool)>(
    symbol: 'queue_rotation_update', assetId: 'flutter_filament_plugin')
external void queue_rotation_update(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  double rads,
  double x,
  double y,
  double z,
  double w,
  bool relative,
);

@ffi.Native<
    ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId, ffi.Float, ffi.Float,
        ffi.Float)>(symbol: 'set_position', assetId: 'flutter_filament_plugin')
external void set_position(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  double x,
  double y,
  double z,
);

@ffi.Native<
    ffi.Void Function(
        ffi.Pointer<ffi.Void>,
        EntityId,
        ffi.Float,
        ffi.Float,
        ffi.Float,
        ffi.Float,
        ffi.Float)>(symbol: 'set_rotation', assetId: 'flutter_filament_plugin')
external void set_rotation(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  double rads,
  double x,
  double y,
  double z,
  double w,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId, ffi.Float)>(
    symbol: 'set_scale', assetId: 'flutter_filament_plugin')
external void set_scale(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  double scale,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId)>(
    symbol: 'move_camera_to_asset', assetId: 'flutter_filament_plugin')
external void move_camera_to_asset(
  ffi.Pointer<ffi.Void> viewer,
  int asset,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>, ffi.Float, ffi.Float, ffi.Float)>(
    symbol: 'set_camera_exposure', assetId: 'flutter_filament_plugin')
external void set_camera_exposure(
  ffi.Pointer<ffi.Void> viewer,
  double aperture,
  double shutterSpeed,
  double sensitivity,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>, ffi.Float, ffi.Float, ffi.Float)>(
    symbol: 'set_camera_position', assetId: 'flutter_filament_plugin')
external void set_camera_position(
  ffi.Pointer<ffi.Void> viewer,
  double x,
  double y,
  double z,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'get_camera_position', assetId: 'flutter_filament_plugin')
external void get_camera_position(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>, ffi.Float, ffi.Float, ffi.Float, ffi.Float)>(
    symbol: 'set_camera_rotation', assetId: 'flutter_filament_plugin')
external void set_camera_rotation(
  ffi.Pointer<ffi.Void> viewer,
  double w,
  double x,
  double y,
  double z,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Float>)>(
    symbol: 'set_camera_model_matrix', assetId: 'flutter_filament_plugin')
external void set_camera_model_matrix(
  ffi.Pointer<ffi.Void> viewer,
  ffi.Pointer<ffi.Float> matrix,
);

@ffi.Native<ffi.Pointer<ffi.Double> Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'get_camera_model_matrix', assetId: 'flutter_filament_plugin')
external ffi.Pointer<ffi.Double> get_camera_model_matrix(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<ffi.Pointer<ffi.Double> Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'get_camera_view_matrix', assetId: 'flutter_filament_plugin')
external ffi.Pointer<ffi.Double> get_camera_view_matrix(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<ffi.Pointer<ffi.Double> Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'get_camera_projection_matrix', assetId: 'flutter_filament_plugin')
external ffi.Pointer<ffi.Double> get_camera_projection_matrix(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Double>,
            ffi.Double, ffi.Double)>(
    symbol: 'set_camera_projection_matrix', assetId: 'flutter_filament_plugin')
external void set_camera_projection_matrix(
  ffi.Pointer<ffi.Void> viewer,
  ffi.Pointer<ffi.Double> matrix,
  double near,
  double far,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Double, ffi.Double)>(
    symbol: 'set_camera_culling', assetId: 'flutter_filament_plugin')
external void set_camera_culling(
  ffi.Pointer<ffi.Void> viewer,
  double near,
  double far,
);

@ffi.Native<ffi.Double Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'get_camera_culling_near', assetId: 'flutter_filament_plugin')
external double get_camera_culling_near(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<ffi.Double Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'get_camera_culling_far', assetId: 'flutter_filament_plugin')
external double get_camera_culling_far(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<ffi.Pointer<ffi.Double> Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'get_camera_culling_projection_matrix',
    assetId: 'flutter_filament_plugin')
external ffi.Pointer<ffi.Double> get_camera_culling_projection_matrix(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<ffi.Pointer<ffi.Double> Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'get_camera_frustum', assetId: 'flutter_filament_plugin')
external ffi.Pointer<ffi.Double> get_camera_frustum(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Float, ffi.Float)>(
    symbol: 'set_camera_fov', assetId: 'flutter_filament_plugin')
external void set_camera_fov(
  ffi.Pointer<ffi.Void> viewer,
  double fovInDegrees,
  double aspect,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Float)>(
    symbol: 'set_camera_focal_length', assetId: 'flutter_filament_plugin')
external void set_camera_focal_length(
  ffi.Pointer<ffi.Void> viewer,
  double focalLength,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Float)>(
    symbol: 'set_camera_focus_distance', assetId: 'flutter_filament_plugin')
external void set_camera_focus_distance(
  ffi.Pointer<ffi.Void> viewer,
  double focusDistance,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, _ManipulatorMode, ffi.Double,
            ffi.Double, ffi.Double)>(
    symbol: 'set_camera_manipulator_options',
    assetId: 'flutter_filament_plugin')
external void set_camera_manipulator_options(
  ffi.Pointer<ffi.Void> viewer,
  int mode,
  double orbitSpeedX,
  double orbitSpeedY,
  double zoomSpeed,
);

@ffi.Native<
        ffi.Int Function(
            ffi.Pointer<ffi.Void>, EntityId, ffi.Pointer<ffi.Char>)>(
    symbol: 'hide_mesh', assetId: 'flutter_filament_plugin')
external int hide_mesh(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Char> meshName,
);

@ffi.Native<
        ffi.Int Function(
            ffi.Pointer<ffi.Void>, EntityId, ffi.Pointer<ffi.Char>)>(
    symbol: 'reveal_mesh', assetId: 'flutter_filament_plugin')
external int reveal_mesh(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Char> meshName,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Bool)>(
    symbol: 'set_post_processing', assetId: 'flutter_filament_plugin')
external void set_post_processing(
  ffi.Pointer<ffi.Void> viewer,
  bool enabled,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Bool, ffi.Bool, ffi.Bool)>(
    symbol: 'set_antialiasing', assetId: 'flutter_filament_plugin')
external void set_antialiasing(
  ffi.Pointer<ffi.Void> viewer,
  bool msaa,
  bool fxaa,
  bool taa,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            ffi.Int,
            ffi.Int,
            ffi.Pointer<
                ffi.NativeFunction<
                    ffi.Void Function(
                        EntityId entityId, ffi.Int x, ffi.Int y)>>)>(
    symbol: 'pick', assetId: 'flutter_filament_plugin')
external void pick(
  ffi.Pointer<ffi.Void> viewer,
  int x,
  int y,
  ffi.Pointer<
          ffi.NativeFunction<
              ffi.Void Function(EntityId entityId, ffi.Int x, ffi.Int y)>>
      callback,
);

@ffi.Native<ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Void>, EntityId)>(
    symbol: 'get_name_for_entity', assetId: 'flutter_filament_plugin')
external ffi.Pointer<ffi.Char> get_name_for_entity(
  ffi.Pointer<ffi.Void> sceneManager,
  int entityId,
);

@ffi.Native<
        EntityId Function(
            ffi.Pointer<ffi.Void>, EntityId, ffi.Pointer<ffi.Char>)>(
    symbol: 'find_child_entity_by_name', assetId: 'flutter_filament_plugin')
external int find_child_entity_by_name(
  ffi.Pointer<ffi.Void> sceneManager,
  int parent,
  ffi.Pointer<ffi.Char> name,
);

@ffi.Native<ffi.Int Function(ffi.Pointer<ffi.Void>, EntityId, ffi.Bool)>(
    symbol: 'get_entity_count', assetId: 'flutter_filament_plugin')
external int get_entity_count(
  ffi.Pointer<ffi.Void> sceneManager,
  int target,
  bool renderableOnly,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>, EntityId, ffi.Bool, ffi.Pointer<EntityId>)>(
    symbol: 'get_entities', assetId: 'flutter_filament_plugin')
external void get_entities(
  ffi.Pointer<ffi.Void> sceneManager,
  int target,
  bool renderableOnly,
  ffi.Pointer<EntityId> out,
);

@ffi.Native<
        ffi.Pointer<ffi.Char> Function(
            ffi.Pointer<ffi.Void>, EntityId, ffi.Int, ffi.Bool)>(
    symbol: 'get_entity_name_at', assetId: 'flutter_filament_plugin')
external ffi.Pointer<ffi.Char> get_entity_name_at(
  ffi.Pointer<ffi.Void> sceneManager,
  int target,
  int index,
  bool renderableOnly,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Bool)>(
    symbol: 'set_recording', assetId: 'flutter_filament_plugin')
external void set_recording(
  ffi.Pointer<ffi.Void> viewer,
  bool recording,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Char>)>(
    symbol: 'set_recording_output_directory',
    assetId: 'flutter_filament_plugin')
external void set_recording_output_directory(
  ffi.Pointer<ffi.Void> viewer,
  ffi.Pointer<ffi.Char> outputDirectory,
);

@ffi.Native<ffi.Void Function()>(
    symbol: 'ios_dummy', assetId: 'flutter_filament_plugin')
external void ios_dummy();

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'flutter_filament_free', assetId: 'flutter_filament_plugin')
external void flutter_filament_free(
  ffi.Pointer<ffi.Void> ptr,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            EntityId,
            ffi.Pointer<
                ffi.NativeFunction<
                    ffi.Void Function(EntityId entityId1, EntityId entityId2)>>,
            ffi.Bool)>(
    symbol: 'add_collision_component', assetId: 'flutter_filament_plugin')
external void add_collision_component(
  ffi.Pointer<ffi.Void> sceneManager,
  int entityId,
  ffi.Pointer<
          ffi.NativeFunction<
              ffi.Void Function(EntityId entityId1, EntityId entityId2)>>
      callback,
  bool affectsCollidingTransform,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId)>(
    symbol: 'remove_collision_component', assetId: 'flutter_filament_plugin')
external void remove_collision_component(
  ffi.Pointer<ffi.Void> sceneManager,
  int entityId,
);

@ffi.Native<ffi.Bool Function(ffi.Pointer<ffi.Void>, EntityId)>(
    symbol: 'add_animation_component', assetId: 'flutter_filament_plugin')
external bool add_animation_component(
  ffi.Pointer<ffi.Void> sceneManager,
  int entityId,
);

@ffi.Native<
        EntityId Function(
            ffi.Pointer<ffi.Void>,
            ffi.Pointer<ffi.Float>,
            ffi.Int,
            ffi.Pointer<ffi.Uint16>,
            ffi.Int,
            ffi.Int,
            ffi.Pointer<ffi.Char>)>(
    symbol: 'create_geometry', assetId: 'flutter_filament_plugin')
external int create_geometry(
  ffi.Pointer<ffi.Void> viewer,
  ffi.Pointer<ffi.Float> vertices,
  int numVertices,
  ffi.Pointer<ffi.Uint16> indices,
  int numIndices,
  int primitiveType,
  ffi.Pointer<ffi.Char> materialPath,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId, EntityId)>(
    symbol: 'set_parent', assetId: 'flutter_filament_plugin')
external void set_parent(
  ffi.Pointer<ffi.Void> sceneManager,
  int child,
  int parent,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId)>(
    symbol: 'test_collisions', assetId: 'flutter_filament_plugin')
external void test_collisions(
  ffi.Pointer<ffi.Void> sceneManager,
  int entity,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId, ffi.Int)>(
    symbol: 'set_priority', assetId: 'flutter_filament_plugin')
external void set_priority(
  ffi.Pointer<ffi.Void> sceneManager,
  int entityId,
  int priority,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Pointer<EntityId>)>(
    symbol: 'get_gizmo', assetId: 'flutter_filament_plugin')
external void get_gizmo(
  ffi.Pointer<ffi.Void> sceneManager,
  ffi.Pointer<EntityId> out,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            ffi.Pointer<ffi.Void>,
            ffi.Pointer<ffi.Char>,
            ffi.Pointer<ResourceLoaderWrapper>,
            ffi
                .Pointer<
                    ffi.NativeFunction<
                        ffi.Void Function(
                            ffi.Pointer<ffi.Void> renderCallbackOwner)>>,
            ffi.Pointer<ffi.Void>,
            ffi.Pointer<
                ffi.NativeFunction<
                    ffi.Void Function(ffi.Pointer<ffi.Void> viewer)>>)>(
    symbol: 'create_filament_viewer_ffi', assetId: 'flutter_filament_plugin')
external void create_filament_viewer_ffi(
  ffi.Pointer<ffi.Void> context,
  ffi.Pointer<ffi.Void> platform,
  ffi.Pointer<ffi.Char> uberArchivePath,
  ffi.Pointer<ResourceLoaderWrapper> loader,
  ffi.Pointer<
          ffi.NativeFunction<
              ffi.Void Function(ffi.Pointer<ffi.Void> renderCallbackOwner)>>
      renderCallback,
  ffi.Pointer<ffi.Void> renderCallbackOwner,
  ffi.Pointer<
          ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void> viewer)>>
      callback,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            ffi.Pointer<ffi.Void>,
            ffi.Uint32,
            ffi.Uint32,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>>)>(
    symbol: 'create_swap_chain_ffi', assetId: 'flutter_filament_plugin')
external void create_swap_chain_ffi(
  ffi.Pointer<ffi.Void> viewer,
  ffi.Pointer<ffi.Void> surface,
  int width,
  int height,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>> onComplete,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>>)>(
    symbol: 'destroy_swap_chain_ffi', assetId: 'flutter_filament_plugin')
external void destroy_swap_chain_ffi(
  ffi.Pointer<ffi.Void> viewer,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>> onComplete,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.IntPtr, ffi.Uint32,
            ffi.Uint32, ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>>)>(
    symbol: 'create_render_target_ffi', assetId: 'flutter_filament_plugin')
external void create_render_target_ffi(
  ffi.Pointer<ffi.Void> viewer,
  int nativeTextureId,
  int width,
  int height,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>> onComplete,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'destroy_filament_viewer_ffi', assetId: 'flutter_filament_plugin')
external void destroy_filament_viewer_ffi(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'render_ffi', assetId: 'flutter_filament_plugin')
external void render_ffi(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<FilamentRenderCallback Function(FilamentRenderCallback)>(
    symbol: 'make_render_callback_fn_pointer',
    assetId: 'flutter_filament_plugin')
external FilamentRenderCallback make_render_callback_fn_pointer(
  FilamentRenderCallback arg0,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Bool)>(
    symbol: 'set_rendering_ffi', assetId: 'flutter_filament_plugin')
external void set_rendering_ffi(
  ffi.Pointer<ffi.Void> viewer,
  bool rendering,
);

@ffi.Native<ffi.Void Function(ffi.Float)>(
    symbol: 'set_frame_interval_ffi', assetId: 'flutter_filament_plugin')
external void set_frame_interval_ffi(
  double frameInterval,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Uint32, ffi.Uint32,
            ffi.Float, ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>>)>(
    symbol: 'update_viewport_and_camera_projection_ffi',
    assetId: 'flutter_filament_plugin')
external void update_viewport_and_camera_projection_ffi(
  ffi.Pointer<ffi.Void> viewer,
  int width,
  int height,
  double scaleFactor,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>> onComplete,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>, ffi.Float, ffi.Float, ffi.Float, ffi.Float)>(
    symbol: 'set_background_color_ffi', assetId: 'flutter_filament_plugin')
external void set_background_color_ffi(
  ffi.Pointer<ffi.Void> viewer,
  double r,
  double g,
  double b,
  double a,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'clear_background_image_ffi', assetId: 'flutter_filament_plugin')
external void clear_background_image_ffi(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Char>,
            ffi.Bool, ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>>)>(
    symbol: 'set_background_image_ffi', assetId: 'flutter_filament_plugin')
external void set_background_image_ffi(
  ffi.Pointer<ffi.Void> viewer,
  ffi.Pointer<ffi.Char> path,
  bool fillHeight,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>> onComplete,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>, ffi.Float, ffi.Float, ffi.Bool)>(
    symbol: 'set_background_image_position_ffi',
    assetId: 'flutter_filament_plugin')
external void set_background_image_position_ffi(
  ffi.Pointer<ffi.Void> viewer,
  double x,
  double y,
  bool clamp,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Int)>(
    symbol: 'set_tone_mapping_ffi', assetId: 'flutter_filament_plugin')
external void set_tone_mapping_ffi(
  ffi.Pointer<ffi.Void> viewer,
  int toneMapping,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Float)>(
    symbol: 'set_bloom_ffi', assetId: 'flutter_filament_plugin')
external void set_bloom_ffi(
  ffi.Pointer<ffi.Void> viewer,
  double strength,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Char>)>(
    symbol: 'load_skybox_ffi', assetId: 'flutter_filament_plugin')
external void load_skybox_ffi(
  ffi.Pointer<ffi.Void> viewer,
  ffi.Pointer<ffi.Char> skyboxPath,
);

@ffi.Native<
    ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Char>,
        ffi.Float)>(symbol: 'load_ibl_ffi', assetId: 'flutter_filament_plugin')
external void load_ibl_ffi(
  ffi.Pointer<ffi.Void> viewer,
  ffi.Pointer<ffi.Char> iblPath,
  double intensity,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'remove_skybox_ffi', assetId: 'flutter_filament_plugin')
external void remove_skybox_ffi(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'remove_ibl_ffi', assetId: 'flutter_filament_plugin')
external void remove_ibl_ffi(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            ffi.Uint8,
            ffi.Float,
            ffi.Float,
            ffi.Float,
            ffi.Float,
            ffi.Float,
            ffi.Float,
            ffi.Float,
            ffi.Float,
            ffi.Bool,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function(EntityId)>>)>(
    symbol: 'add_light_ffi', assetId: 'flutter_filament_plugin')
external void add_light_ffi(
  ffi.Pointer<ffi.Void> viewer,
  int type,
  double colour,
  double intensity,
  double posX,
  double posY,
  double posZ,
  double dirX,
  double dirY,
  double dirZ,
  bool shadows,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function(EntityId)>> callback,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId)>(
    symbol: 'remove_light_ffi', assetId: 'flutter_filament_plugin')
external void remove_light_ffi(
  ffi.Pointer<ffi.Void> viewer,
  int entityId,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>)>(
    symbol: 'clear_lights_ffi', assetId: 'flutter_filament_plugin')
external void clear_lights_ffi(
  ffi.Pointer<ffi.Void> viewer,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Char>, ffi.Int,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function(EntityId)>>)>(
    symbol: 'load_glb_ffi', assetId: 'flutter_filament_plugin')
external void load_glb_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  ffi.Pointer<ffi.Char> assetPath,
  int numInstances,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function(EntityId)>> callback,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            ffi.Pointer<ffi.Void>,
            ffi.Size,
            ffi.Int,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function(EntityId)>>)>(
    symbol: 'load_glb_from_buffer_ffi', assetId: 'flutter_filament_plugin')
external void load_glb_from_buffer_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  ffi.Pointer<ffi.Void> data,
  int length,
  int numInstances,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function(EntityId)>> callback,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            ffi.Pointer<ffi.Char>,
            ffi.Pointer<ffi.Char>,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function(EntityId)>>)>(
    symbol: 'load_gltf_ffi', assetId: 'flutter_filament_plugin')
external void load_gltf_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  ffi.Pointer<ffi.Char> assetPath,
  ffi.Pointer<ffi.Char> relativePath,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function(EntityId)>> callback,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function(EntityId)>>)>(
    symbol: 'create_instance_ffi', assetId: 'flutter_filament_plugin')
external void create_instance_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  int entityId,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function(EntityId)>> callback,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>>)>(
    symbol: 'remove_entity_ffi', assetId: 'flutter_filament_plugin')
external void remove_entity_ffi(
  ffi.Pointer<ffi.Void> viewer,
  int asset,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>> callback,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>>)>(
    symbol: 'clear_entities_ffi', assetId: 'flutter_filament_plugin')
external void clear_entities_ffi(
  ffi.Pointer<ffi.Void> viewer,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>> callback,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            EntityId,
            ffi.Pointer<ffi.Char>,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Bool)>>)>(
    symbol: 'set_camera_ffi', assetId: 'flutter_filament_plugin')
external void set_camera_ffi(
  ffi.Pointer<ffi.Void> viewer,
  int asset,
  ffi.Pointer<ffi.Char> nodeName,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Bool)>> callback,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId,
            ffi.Pointer<ffi.Char>, ffi.Pointer<ffi.Float>, ffi.Int)>(
    symbol: 'apply_weights_ffi', assetId: 'flutter_filament_plugin')
external void apply_weights_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Char> entityName,
  ffi.Pointer<ffi.Float> weights,
  int count,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId, ffi.Int, ffi.Bool,
            ffi.Bool, ffi.Bool, ffi.Float)>(
    symbol: 'play_animation_ffi', assetId: 'flutter_filament_plugin')
external void play_animation_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  int index,
  bool loop,
  bool reverse,
  bool replaceActive,
  double crossfade,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId, ffi.Int, ffi.Int)>(
    symbol: 'set_animation_frame_ffi', assetId: 'flutter_filament_plugin')
external void set_animation_frame_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  int animationIndex,
  int animationFrame,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId, ffi.Int)>(
    symbol: 'stop_animation_ffi', assetId: 'flutter_filament_plugin')
external void stop_animation_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  int index,
);

@ffi.Native<
        ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Int)>>)>(
    symbol: 'get_animation_count_ffi', assetId: 'flutter_filament_plugin')
external void get_animation_count_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Int)>> callback,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            EntityId,
            ffi.Pointer<ffi.Char>,
            ffi.Int,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>>)>(
    symbol: 'get_animation_name_ffi', assetId: 'flutter_filament_plugin')
external void get_animation_name_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Char> outPtr,
  int index,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>> callback,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            EntityId,
            ffi.Pointer<ffi.Char>,
            ffi.Pointer<ffi.Char>,
            ffi.Int,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>>)>(
    symbol: 'get_morph_target_name_ffi', assetId: 'flutter_filament_plugin')
external void get_morph_target_name_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Char> meshName,
  ffi.Pointer<ffi.Char> outPtr,
  int index,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>> callback,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            EntityId,
            ffi.Pointer<ffi.Char>,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Int32)>>)>(
    symbol: 'get_morph_target_name_count_ffi',
    assetId: 'flutter_filament_plugin')
external void get_morph_target_name_count_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Char> meshName,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Int32)>> callback,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            EntityId,
            ffi.Pointer<ffi.Float>,
            ffi.Int,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Bool)>>)>(
    symbol: 'set_morph_target_weights_ffi', assetId: 'flutter_filament_plugin')
external void set_morph_target_weights_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Float> morphData,
  int numWeights,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Bool)>> callback,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            EntityId,
            ffi.Pointer<ffi.Char>,
            ffi.Pointer<ffi.Float>,
            ffi.Pointer<ffi.Int>,
            ffi.Int,
            ffi.Int,
            ffi.Float,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Bool)>>)>(
    symbol: 'set_morph_animation_ffi', assetId: 'flutter_filament_plugin')
external void set_morph_animation_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Char> entityName,
  ffi.Pointer<ffi.Float> morphData,
  ffi.Pointer<ffi.Int> morphIndices,
  int numMorphTargets,
  int numFrames,
  double frameLengthInMs,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Bool)>> callback,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            EntityId,
            ffi.Pointer<ffi.Char>,
            ffi.Pointer<ffi.Float>,
            ffi.Pointer<ffi.Char>,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Bool)>>)>(
    symbol: 'set_bone_transform_ffi', assetId: 'flutter_filament_plugin')
external void set_bone_transform_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Char> entityName,
  ffi.Pointer<ffi.Float> transform,
  ffi.Pointer<ffi.Char> boneName,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Bool)>> callback,
);

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            EntityId,
            ffi.Pointer<ffi.Float>,
            ffi.Int,
            ffi.Pointer<ffi.Char>,
            ffi.Pointer<ffi.Pointer<ffi.Char>>,
            ffi.Int,
            ffi.Float,
            ffi.Bool)>(
    symbol: 'add_bone_animation_ffi', assetId: 'flutter_filament_plugin')
external void add_bone_animation_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  int asset,
  ffi.Pointer<ffi.Float> frameData,
  int numFrames,
  ffi.Pointer<ffi.Char> boneName,
  ffi.Pointer<ffi.Pointer<ffi.Char>> meshNames,
  int numMeshTargets,
  double frameLengthInMs,
  bool isModelSpace,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Bool)>(
    symbol: 'set_post_processing_ffi', assetId: 'flutter_filament_plugin')
external void set_post_processing_ffi(
  ffi.Pointer<ffi.Void> viewer,
  bool enabled,
);

@ffi.Native<ffi.Void Function(ffi.Pointer<ffi.Void>, EntityId)>(
    symbol: 'reset_to_rest_pose_ffi', assetId: 'flutter_filament_plugin')
external void reset_to_rest_pose_ffi(
  ffi.Pointer<ffi.Void> sceneManager,
  int entityId,
);

@ffi.Native<ffi.Void Function()>(
    symbol: 'ios_dummy_ffi', assetId: 'flutter_filament_plugin')
external void ios_dummy_ffi();

@ffi.Native<
        ffi.Void Function(
            ffi.Pointer<ffi.Void>,
            ffi.Pointer<ffi.Float>,
            ffi.Int,
            ffi.Pointer<ffi.Uint16>,
            ffi.Int,
            ffi.Int,
            ffi.Pointer<ffi.Char>,
            ffi.Pointer<ffi.NativeFunction<ffi.Void Function(EntityId)>>)>(
    symbol: 'create_geometry_ffi', assetId: 'flutter_filament_plugin')
external void create_geometry_ffi(
  ffi.Pointer<ffi.Void> viewer,
  ffi.Pointer<ffi.Float> vertices,
  int numVertices,
  ffi.Pointer<ffi.Uint16> indices,
  int numIndices,
  int primitiveType,
  ffi.Pointer<ffi.Char> materialPath,
  ffi.Pointer<ffi.NativeFunction<ffi.Void Function(EntityId)>> callback,
);

final class __mbstate_t extends ffi.Union {
  @ffi.Array.multi([128])
  external ffi.Array<ffi.Char> __mbstate8;

  @ffi.LongLong()
  external int _mbstateL;
}

final class __darwin_pthread_handler_rec extends ffi.Struct {
  external ffi
      .Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>
      __routine;

  external ffi.Pointer<ffi.Void> __arg;

  external ffi.Pointer<__darwin_pthread_handler_rec> __next;
}

final class _opaque_pthread_attr_t extends ffi.Struct {
  @ffi.Long()
  external int __sig;

  @ffi.Array.multi([56])
  external ffi.Array<ffi.Char> __opaque;
}

final class _opaque_pthread_cond_t extends ffi.Struct {
  @ffi.Long()
  external int __sig;

  @ffi.Array.multi([40])
  external ffi.Array<ffi.Char> __opaque;
}

final class _opaque_pthread_condattr_t extends ffi.Struct {
  @ffi.Long()
  external int __sig;

  @ffi.Array.multi([8])
  external ffi.Array<ffi.Char> __opaque;
}

final class _opaque_pthread_mutex_t extends ffi.Struct {
  @ffi.Long()
  external int __sig;

  @ffi.Array.multi([56])
  external ffi.Array<ffi.Char> __opaque;
}

final class _opaque_pthread_mutexattr_t extends ffi.Struct {
  @ffi.Long()
  external int __sig;

  @ffi.Array.multi([8])
  external ffi.Array<ffi.Char> __opaque;
}

final class _opaque_pthread_once_t extends ffi.Struct {
  @ffi.Long()
  external int __sig;

  @ffi.Array.multi([8])
  external ffi.Array<ffi.Char> __opaque;
}

final class _opaque_pthread_rwlock_t extends ffi.Struct {
  @ffi.Long()
  external int __sig;

  @ffi.Array.multi([192])
  external ffi.Array<ffi.Char> __opaque;
}

final class _opaque_pthread_rwlockattr_t extends ffi.Struct {
  @ffi.Long()
  external int __sig;

  @ffi.Array.multi([16])
  external ffi.Array<ffi.Char> __opaque;
}

final class _opaque_pthread_t extends ffi.Struct {
  @ffi.Long()
  external int __sig;

  external ffi.Pointer<__darwin_pthread_handler_rec> __cleanup_stack;

  @ffi.Array.multi([8176])
  external ffi.Array<ffi.Char> __opaque;
}

final class ResourceBuffer extends ffi.Struct {
  external ffi.Pointer<ffi.Void> data;

  @ffi.Int32()
  external int size;

  @ffi.Int32()
  external int id;
}

final class ResourceLoaderWrapper extends ffi.Struct {
  external LoadFilamentResource mLoadFilamentResource;

  external FreeFilamentResource mFreeFilamentResource;

  external LoadFilamentResourceFromOwner mLoadFilamentResourceFromOwner;

  external FreeFilamentResourceFromOwner mFreeFilamentResourceFromOwner;

  external ffi.Pointer<ffi.Void> mOwner;
}

typedef LoadFilamentResource = ffi.Pointer<
    ffi.NativeFunction<ResourceBuffer Function(ffi.Pointer<ffi.Char> uri)>>;
typedef FreeFilamentResource
    = ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ResourceBuffer)>>;
typedef LoadFilamentResourceFromOwner = ffi.Pointer<
    ffi.NativeFunction<
        ResourceBuffer Function(ffi.Pointer<ffi.Char>, ffi.Pointer<ffi.Void>)>>;
typedef FreeFilamentResourceFromOwner = ffi.Pointer<
    ffi
    .NativeFunction<ffi.Void Function(ResourceBuffer, ffi.Pointer<ffi.Void>)>>;

/// This header replicates most of the methods in FlutterFilamentApi.h, and is only intended to be used to generate client FFI bindings.
/// The intention is that calling one of these methods will call its respective method in FlutterFilamentApi.h, but wrapped in some kind of thread runner to ensure thread safety.
typedef EntityId = ffi.Int32;
typedef _ManipulatorMode = ffi.Int32;
typedef FilamentRenderCallback = ffi.Pointer<
    ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void> owner)>>;

const int __bool_true_false_are_defined = 1;

const int true1 = 1;

const int false1 = 0;

const int __DARWIN_ONLY_64_BIT_INO_T = 1;

const int __DARWIN_ONLY_UNIX_CONFORMANCE = 1;

const int __DARWIN_ONLY_VERS_1050 = 1;

const int __DARWIN_UNIX03 = 1;

const int __DARWIN_64_BIT_INO_T = 1;

const int __DARWIN_VERS_1050 = 1;

const int __DARWIN_NON_CANCELABLE = 0;

const String __DARWIN_SUF_EXTSN = '\$DARWIN_EXTSN';

const int __DARWIN_C_ANSI = 4096;

const int __DARWIN_C_FULL = 900000;

const int __DARWIN_C_LEVEL = 900000;

const int __STDC_WANT_LIB_EXT1__ = 1;

const int __DARWIN_NO_LONG_LONG = 0;

const int _DARWIN_FEATURE_64_BIT_INODE = 1;

const int _DARWIN_FEATURE_ONLY_64_BIT_INODE = 1;

const int _DARWIN_FEATURE_ONLY_VERS_1050 = 1;

const int _DARWIN_FEATURE_ONLY_UNIX_CONFORMANCE = 1;

const int _DARWIN_FEATURE_UNIX_CONFORMANCE = 3;

const int __has_ptrcheck = 0;

const int __DARWIN_NULL = 0;

const int __PTHREAD_SIZE__ = 8176;

const int __PTHREAD_ATTR_SIZE__ = 56;

const int __PTHREAD_MUTEXATTR_SIZE__ = 8;

const int __PTHREAD_MUTEX_SIZE__ = 56;

const int __PTHREAD_CONDATTR_SIZE__ = 8;

const int __PTHREAD_COND_SIZE__ = 40;

const int __PTHREAD_ONCE_SIZE__ = 8;

const int __PTHREAD_RWLOCK_SIZE__ = 192;

const int __PTHREAD_RWLOCKATTR_SIZE__ = 16;

const int __DARWIN_WCHAR_MAX = 2147483647;

const int __DARWIN_WCHAR_MIN = -2147483648;

const int __DARWIN_WEOF = -1;

const int _FORTIFY_SOURCE = 2;

const int NULL = 0;

const int USER_ADDR_NULL = 0;

const int __WORDSIZE = 64;

const int INT8_MAX = 127;

const int INT16_MAX = 32767;

const int INT32_MAX = 2147483647;

const int INT64_MAX = 9223372036854775807;

const int INT8_MIN = -128;

const int INT16_MIN = -32768;

const int INT32_MIN = -2147483648;

const int INT64_MIN = -9223372036854775808;

const int UINT8_MAX = 255;

const int UINT16_MAX = 65535;

const int UINT32_MAX = 4294967295;

const int UINT64_MAX = -1;

const int INT_LEAST8_MIN = -128;

const int INT_LEAST16_MIN = -32768;

const int INT_LEAST32_MIN = -2147483648;

const int INT_LEAST64_MIN = -9223372036854775808;

const int INT_LEAST8_MAX = 127;

const int INT_LEAST16_MAX = 32767;

const int INT_LEAST32_MAX = 2147483647;

const int INT_LEAST64_MAX = 9223372036854775807;

const int UINT_LEAST8_MAX = 255;

const int UINT_LEAST16_MAX = 65535;

const int UINT_LEAST32_MAX = 4294967295;

const int UINT_LEAST64_MAX = -1;

const int INT_FAST8_MIN = -128;

const int INT_FAST16_MIN = -32768;

const int INT_FAST32_MIN = -2147483648;

const int INT_FAST64_MIN = -9223372036854775808;

const int INT_FAST8_MAX = 127;

const int INT_FAST16_MAX = 32767;

const int INT_FAST32_MAX = 2147483647;

const int INT_FAST64_MAX = 9223372036854775807;

const int UINT_FAST8_MAX = 255;

const int UINT_FAST16_MAX = 65535;

const int UINT_FAST32_MAX = 4294967295;

const int UINT_FAST64_MAX = -1;

const int INTPTR_MAX = 9223372036854775807;

const int INTPTR_MIN = -9223372036854775808;

const int UINTPTR_MAX = -1;

const int INTMAX_MAX = 9223372036854775807;

const int UINTMAX_MAX = -1;

const int INTMAX_MIN = -9223372036854775808;

const int PTRDIFF_MIN = -9223372036854775808;

const int PTRDIFF_MAX = 9223372036854775807;

const int SIZE_MAX = -1;

const int RSIZE_MAX = 9223372036854775807;

const int WCHAR_MAX = 2147483647;

const int WCHAR_MIN = -2147483648;

const int WINT_MIN = -2147483648;

const int WINT_MAX = 2147483647;

const int SIG_ATOMIC_MIN = -2147483648;

const int SIG_ATOMIC_MAX = 2147483647;
