use ffi-native for generated bindings
This commit is contained in:
@@ -28,8 +28,6 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
|
|
||||||
late Pointer<Void>? _assetManager;
|
late Pointer<Void>? _assetManager;
|
||||||
|
|
||||||
late NativeLibrary _lib;
|
|
||||||
|
|
||||||
Pointer<Void>? _viewer;
|
Pointer<Void>? _viewer;
|
||||||
|
|
||||||
final String? uberArchivePath;
|
final String? uberArchivePath;
|
||||||
@@ -80,7 +78,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
} else {
|
} else {
|
||||||
dl = DynamicLibrary.open("libflutter_filament_android.so");
|
dl = DynamicLibrary.open("libflutter_filament_android.so");
|
||||||
}
|
}
|
||||||
_lib = NativeLibrary(dl);
|
|
||||||
if (Platform.isWindows) {
|
if (Platform.isWindows) {
|
||||||
_channel.invokeMethod("usesBackingWindow").then((result) {
|
_channel.invokeMethod("usesBackingWindow").then((result) {
|
||||||
_usesBackingWindow = result;
|
_usesBackingWindow = result;
|
||||||
@@ -98,7 +96,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_rendering = render;
|
_rendering = render;
|
||||||
_lib.set_rendering_ffi(_viewer!, render);
|
set_rendering_ffi(_viewer!, render);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -106,12 +104,12 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.render_ffi(_viewer!);
|
render_ffi(_viewer!);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future setFrameRate(int framerate) async {
|
Future setFrameRate(int framerate) async {
|
||||||
_lib.set_frame_interval_ffi(1.0 / framerate);
|
set_frame_interval_ffi(1.0 / framerate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -137,7 +135,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
_viewer = null;
|
_viewer = null;
|
||||||
|
|
||||||
_assetManager = null;
|
_assetManager = null;
|
||||||
_lib.destroy_filament_viewer_ffi(viewer!);
|
destroy_filament_viewer_ffi(viewer!);
|
||||||
hasViewer.value = false;
|
hasViewer.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,7 +188,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
|
|
||||||
dev.log("Got rendering surface");
|
dev.log("Got rendering surface");
|
||||||
|
|
||||||
_viewer = _lib.create_filament_viewer_ffi(
|
_viewer = create_filament_viewer_ffi(
|
||||||
Pointer<Void>.fromAddress(renderingSurface.sharedContext),
|
Pointer<Void>.fromAddress(renderingSurface.sharedContext),
|
||||||
_driver,
|
_driver,
|
||||||
uberArchivePath?.toNativeUtf8().cast<Char>() ?? nullptr,
|
uberArchivePath?.toNativeUtf8().cast<Char>() ?? nullptr,
|
||||||
@@ -202,15 +200,15 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
throw Exception("Failed to create viewer. Check logs for details");
|
throw Exception("Failed to create viewer. Check logs for details");
|
||||||
}
|
}
|
||||||
|
|
||||||
_assetManager = _lib.get_asset_manager(_viewer!);
|
_assetManager = get_asset_manager(_viewer!);
|
||||||
|
|
||||||
_lib.create_swap_chain_ffi(_viewer!, renderingSurface.surface,
|
create_swap_chain_ffi(_viewer!, renderingSurface.surface,
|
||||||
rect.value!.width.toInt(), rect.value!.height.toInt());
|
rect.value!.width.toInt(), rect.value!.height.toInt());
|
||||||
dev.log("Created swap chain");
|
dev.log("Created swap chain");
|
||||||
if (renderingSurface.textureHandle != 0) {
|
if (renderingSurface.textureHandle != 0) {
|
||||||
dev.log(
|
dev.log(
|
||||||
"Creating render target from native texture ${renderingSurface.textureHandle}");
|
"Creating render target from native texture ${renderingSurface.textureHandle}");
|
||||||
_lib.create_render_target_ffi(_viewer!, renderingSurface.textureHandle,
|
create_render_target_ffi(_viewer!, renderingSurface.textureHandle,
|
||||||
rect.value!.width.toInt(), rect.value!.height.toInt());
|
rect.value!.width.toInt(), rect.value!.height.toInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,7 +217,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
width: rect.value!.width.toInt(),
|
width: rect.value!.width.toInt(),
|
||||||
height: rect.value!.height.toInt());
|
height: rect.value!.height.toInt());
|
||||||
dev.log("texture details ${textureDetails.value}");
|
dev.log("texture details ${textureDetails.value}");
|
||||||
_lib.update_viewport_and_camera_projection_ffi(
|
update_viewport_and_camera_projection_ffi(
|
||||||
_viewer!, rect.value!.width.toInt(), rect.value!.height.toInt(), 1.0);
|
_viewer!, rect.value!.width.toInt(), rect.value!.height.toInt(), 1.0);
|
||||||
hasViewer.value = true;
|
hasViewer.value = true;
|
||||||
}
|
}
|
||||||
@@ -310,10 +308,10 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
|
|
||||||
_resizing = true;
|
_resizing = true;
|
||||||
|
|
||||||
_lib.set_rendering_ffi(_viewer!, false);
|
set_rendering_ffi(_viewer!, false);
|
||||||
|
|
||||||
if (!_usesBackingWindow) {
|
if (!_usesBackingWindow) {
|
||||||
_lib.destroy_swap_chain_ffi(_viewer!);
|
destroy_swap_chain_ffi(_viewer!);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (requiresTextureWidget) {
|
if (requiresTextureWidget) {
|
||||||
@@ -337,17 +335,17 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
throw Exception("Failed to create viewer. Check logs for details");
|
throw Exception("Failed to create viewer. Check logs for details");
|
||||||
}
|
}
|
||||||
|
|
||||||
_assetManager = _lib.get_asset_manager(_viewer!);
|
_assetManager = get_asset_manager(_viewer!);
|
||||||
|
|
||||||
if (!_usesBackingWindow) {
|
if (!_usesBackingWindow) {
|
||||||
_lib.create_swap_chain_ffi(_viewer!, renderingSurface.surface,
|
create_swap_chain_ffi(_viewer!, renderingSurface.surface,
|
||||||
rect.value!.width.toInt(), rect.value!.height.toInt());
|
rect.value!.width.toInt(), rect.value!.height.toInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (renderingSurface.textureHandle != 0) {
|
if (renderingSurface.textureHandle != 0) {
|
||||||
dev.log(
|
dev.log(
|
||||||
"Creating render target from native texture ${renderingSurface.textureHandle}");
|
"Creating render target from native texture ${renderingSurface.textureHandle}");
|
||||||
_lib.create_render_target_ffi(_viewer!, renderingSurface.textureHandle,
|
create_render_target_ffi(_viewer!, renderingSurface.textureHandle,
|
||||||
rect.value!.width.toInt(), rect.value!.height.toInt());
|
rect.value!.width.toInt(), rect.value!.height.toInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -356,7 +354,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
width: rect.value!.width.toInt(),
|
width: rect.value!.width.toInt(),
|
||||||
height: rect.value!.height.toInt());
|
height: rect.value!.height.toInt());
|
||||||
|
|
||||||
_lib.update_viewport_and_camera_projection_ffi(
|
update_viewport_and_camera_projection_ffi(
|
||||||
_viewer!, rect.value!.width.toInt(), rect.value!.height.toInt(), 1.0);
|
_viewer!, rect.value!.width.toInt(), rect.value!.height.toInt(), 1.0);
|
||||||
|
|
||||||
await setRendering(_rendering);
|
await setRendering(_rendering);
|
||||||
@@ -369,7 +367,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.clear_background_image_ffi(_viewer!);
|
clear_background_image_ffi(_viewer!);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -377,7 +375,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.set_background_image_ffi(
|
set_background_image_ffi(
|
||||||
_viewer!, path.toNativeUtf8().cast<Char>(), fillHeight);
|
_viewer!, path.toNativeUtf8().cast<Char>(), fillHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -386,7 +384,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.set_background_color_ffi(
|
set_background_color_ffi(
|
||||||
_viewer!,
|
_viewer!,
|
||||||
color.red.toDouble() / 255.0,
|
color.red.toDouble() / 255.0,
|
||||||
color.green.toDouble() / 255.0,
|
color.green.toDouble() / 255.0,
|
||||||
@@ -400,7 +398,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.set_background_image_position_ffi(_viewer!, x, y, clamp);
|
set_background_image_position_ffi(_viewer!, x, y, clamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -408,7 +406,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.load_skybox_ffi(_viewer!, skyboxPath.toNativeUtf8().cast<Char>());
|
load_skybox_ffi(_viewer!, skyboxPath.toNativeUtf8().cast<Char>());
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -416,8 +414,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.load_ibl_ffi(
|
load_ibl_ffi(_viewer!, lightingPath.toNativeUtf8().cast<Char>(), intensity);
|
||||||
_viewer!, lightingPath.toNativeUtf8().cast<Char>(), intensity);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -425,7 +422,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.remove_skybox_ffi(_viewer!);
|
remove_skybox_ffi(_viewer!);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -433,7 +430,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.remove_ibl_ffi(_viewer!);
|
remove_ibl_ffi(_viewer!);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -451,8 +448,8 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
var entity = _lib.add_light_ffi(_viewer!, type, colour, intensity, posX,
|
var entity = add_light_ffi(_viewer!, type, colour, intensity, posX, posY,
|
||||||
posY, posZ, dirX, dirY, dirZ, castShadows);
|
posZ, dirX, dirY, dirZ, castShadows);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -461,7 +458,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.remove_light_ffi(_viewer!, light);
|
remove_light_ffi(_viewer!, light);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -469,7 +466,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.clear_lights_ffi(_viewer!);
|
clear_lights_ffi(_viewer!);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -480,8 +477,8 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (unlit) {
|
if (unlit) {
|
||||||
throw Exception("Not yet implemented");
|
throw Exception("Not yet implemented");
|
||||||
}
|
}
|
||||||
var asset = _lib.load_glb_ffi(
|
var asset =
|
||||||
_assetManager!, path.toNativeUtf8().cast<Char>(), unlit);
|
load_glb_ffi(_assetManager!, path.toNativeUtf8().cast<Char>(), unlit);
|
||||||
if (asset == _FILAMENT_ASSET_ERROR) {
|
if (asset == _FILAMENT_ASSET_ERROR) {
|
||||||
throw Exception("An error occurred loading the asset at $path");
|
throw Exception("An error occurred loading the asset at $path");
|
||||||
}
|
}
|
||||||
@@ -498,9 +495,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
var asset = _lib.load_gltf_ffi(
|
var asset = load_gltf_ffi(_assetManager!, path.toNativeUtf8().cast<Char>(),
|
||||||
_assetManager!,
|
|
||||||
path.toNativeUtf8().cast<Char>(),
|
|
||||||
relativeResourcePath.toNativeUtf8().cast<Char>());
|
relativeResourcePath.toNativeUtf8().cast<Char>());
|
||||||
if (asset == _FILAMENT_ASSET_ERROR) {
|
if (asset == _FILAMENT_ASSET_ERROR) {
|
||||||
throw Exception("An error occurred loading the asset at $path");
|
throw Exception("An error occurred loading the asset at $path");
|
||||||
@@ -513,7 +508,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.grab_begin(_viewer!, x * _pixelRatio, y * _pixelRatio, true);
|
grab_begin(_viewer!, x * _pixelRatio, y * _pixelRatio, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -521,7 +516,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.grab_update(_viewer!, x * _pixelRatio, y * _pixelRatio);
|
grab_update(_viewer!, x * _pixelRatio, y * _pixelRatio);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -529,7 +524,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.grab_end(_viewer!);
|
grab_end(_viewer!);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -537,7 +532,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.grab_begin(_viewer!, x * _pixelRatio, y * _pixelRatio, false);
|
grab_begin(_viewer!, x * _pixelRatio, y * _pixelRatio, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -545,7 +540,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.grab_update(_viewer!, x * _pixelRatio, y * _pixelRatio);
|
grab_update(_viewer!, x * _pixelRatio, y * _pixelRatio);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -553,7 +548,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.grab_end(_viewer!);
|
grab_end(_viewer!);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -567,7 +562,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
for (int i = 0; i < weights.length; i++) {
|
for (int i = 0; i < weights.length; i++) {
|
||||||
weightsPtr.elementAt(i).value = weights[i];
|
weightsPtr.elementAt(i).value = weights[i];
|
||||||
}
|
}
|
||||||
_lib.set_morph_target_weights_ffi(_assetManager!, entity,
|
set_morph_target_weights_ffi(_assetManager!, entity,
|
||||||
meshName.toNativeUtf8().cast<Char>(), weightsPtr, weights.length);
|
meshName.toNativeUtf8().cast<Char>(), weightsPtr, weights.length);
|
||||||
calloc.free(weightsPtr);
|
calloc.free(weightsPtr);
|
||||||
}
|
}
|
||||||
@@ -579,11 +574,11 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
var names = <String>[];
|
var names = <String>[];
|
||||||
var count = _lib.get_morph_target_name_count_ffi(
|
var count = get_morph_target_name_count_ffi(
|
||||||
_assetManager!, entity, meshName.toNativeUtf8().cast<Char>());
|
_assetManager!, entity, meshName.toNativeUtf8().cast<Char>());
|
||||||
var outPtr = calloc<Char>(255);
|
var outPtr = calloc<Char>(255);
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
_lib.get_morph_target_name(_assetManager!, entity,
|
get_morph_target_name(_assetManager!, entity,
|
||||||
meshName.toNativeUtf8().cast<Char>(), outPtr, i);
|
meshName.toNativeUtf8().cast<Char>(), outPtr, i);
|
||||||
names.add(outPtr.cast<Utf8>().toDartString());
|
names.add(outPtr.cast<Utf8>().toDartString());
|
||||||
}
|
}
|
||||||
@@ -596,11 +591,11 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
var animationCount = _lib.get_animation_count(_assetManager!, entity);
|
var animationCount = get_animation_count(_assetManager!, entity);
|
||||||
var names = <String>[];
|
var names = <String>[];
|
||||||
var outPtr = calloc<Char>(255);
|
var outPtr = calloc<Char>(255);
|
||||||
for (int i = 0; i < animationCount; i++) {
|
for (int i = 0; i < animationCount; i++) {
|
||||||
_lib.get_animation_name_ffi(_assetManager!, entity, outPtr, i);
|
get_animation_name_ffi(_assetManager!, entity, outPtr, i);
|
||||||
names.add(outPtr.cast<Utf8>().toDartString());
|
names.add(outPtr.cast<Utf8>().toDartString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -614,7 +609,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
var duration =
|
var duration =
|
||||||
_lib.get_animation_duration(_assetManager!, entity, animationIndex);
|
get_animation_duration(_assetManager!, entity, animationIndex);
|
||||||
|
|
||||||
return duration;
|
return duration;
|
||||||
}
|
}
|
||||||
@@ -649,7 +644,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
idxPtr.elementAt(i).value = index;
|
idxPtr.elementAt(i).value = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
_lib.set_morph_animation(
|
set_morph_animation(
|
||||||
_assetManager!,
|
_assetManager!,
|
||||||
entity,
|
entity,
|
||||||
animation.meshName.toNativeUtf8().cast<Char>(),
|
animation.meshName.toNativeUtf8().cast<Char>(),
|
||||||
@@ -705,7 +700,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.remove_asset_ffi(_viewer!, entity);
|
remove_asset_ffi(_viewer!, entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -713,7 +708,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.clear_assets_ffi(_viewer!);
|
clear_assets_ffi(_viewer!);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -721,7 +716,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.scroll_begin(_viewer!);
|
scroll_begin(_viewer!);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -729,7 +724,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.scroll_update(_viewer!, x, y, z);
|
scroll_update(_viewer!, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -737,7 +732,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.scroll_end(_viewer!);
|
scroll_end(_viewer!);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -749,7 +744,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.play_animation_ffi(
|
play_animation_ffi(
|
||||||
_assetManager!, entity, index, loop, reverse, replaceActive, crossfade);
|
_assetManager!, entity, index, loop, reverse, replaceActive, crossfade);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -759,7 +754,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.set_animation_frame(_assetManager!, entity, index, animationFrame);
|
set_animation_frame(_assetManager!, entity, index, animationFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -767,7 +762,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.stop_animation(_assetManager!, entity, animationIndex);
|
stop_animation(_assetManager!, entity, animationIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -775,7 +770,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
var result = _lib.set_camera(
|
var result = set_camera(
|
||||||
_viewer!, entity, name?.toNativeUtf8().cast<Char>() ?? nullptr);
|
_viewer!, entity, name?.toNativeUtf8().cast<Char>() ?? nullptr);
|
||||||
if (!result) {
|
if (!result) {
|
||||||
throw Exception("Failed to set camera");
|
throw Exception("Failed to set camera");
|
||||||
@@ -788,7 +783,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
|
|
||||||
_lib.set_tone_mapping_ffi(_viewer!, mapper.index);
|
set_tone_mapping_ffi(_viewer!, mapper.index);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -797,7 +792,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
|
|
||||||
_lib.set_post_processing_ffi(_viewer!, enabled);
|
set_post_processing_ffi(_viewer!, enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -805,7 +800,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.set_bloom_ffi(_viewer!, bloom);
|
set_bloom_ffi(_viewer!, bloom);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -813,7 +808,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.set_camera_focal_length(_viewer!, focalLength);
|
set_camera_focal_length(_viewer!, focalLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -821,7 +816,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.set_camera_focus_distance(_viewer!, focusDistance);
|
set_camera_focus_distance(_viewer!, focusDistance);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -829,7 +824,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.set_camera_position(_viewer!, x, y, z);
|
set_camera_position(_viewer!, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -837,7 +832,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.move_camera_to_asset(_viewer!, entity);
|
move_camera_to_asset(_viewer!, entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -845,7 +840,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.set_view_frustum_culling(_viewer!, enabled);
|
set_view_frustum_culling(_viewer!, enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -854,7 +849,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.set_camera_exposure(_viewer!, aperture, shutterSpeed, sensitivity);
|
set_camera_exposure(_viewer!, aperture, shutterSpeed, sensitivity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -862,7 +857,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.set_camera_rotation(_viewer!, rads, x, y, z);
|
set_camera_rotation(_viewer!, rads, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -875,7 +870,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++) {
|
||||||
ptr.elementAt(i).value = matrix[i];
|
ptr.elementAt(i).value = matrix[i];
|
||||||
}
|
}
|
||||||
_lib.set_camera_model_matrix(_viewer!, ptr);
|
set_camera_model_matrix(_viewer!, ptr);
|
||||||
calloc.free(ptr);
|
calloc.free(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -885,7 +880,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
var result = _lib.set_material_color(
|
var result = set_material_color(
|
||||||
_assetManager!,
|
_assetManager!,
|
||||||
entity,
|
entity,
|
||||||
meshName.toNativeUtf8().cast<Char>(),
|
meshName.toNativeUtf8().cast<Char>(),
|
||||||
@@ -904,7 +899,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.transform_to_unit_cube(_assetManager!, entity);
|
transform_to_unit_cube(_assetManager!, entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -913,7 +908,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.set_position(_assetManager!, entity, x, y, z);
|
set_position(_assetManager!, entity, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -921,7 +916,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.set_scale(_assetManager!, entity, scale);
|
set_scale(_assetManager!, entity, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -930,7 +925,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
_lib.set_rotation(_assetManager!, entity, rads, x, y, z);
|
set_rotation(_assetManager!, entity, rads, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -938,7 +933,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
if (_lib.hide_mesh(
|
if (hide_mesh(
|
||||||
_assetManager!, entity, meshName.toNativeUtf8().cast<Char>()) !=
|
_assetManager!, entity, meshName.toNativeUtf8().cast<Char>()) !=
|
||||||
1) {}
|
1) {}
|
||||||
}
|
}
|
||||||
@@ -948,7 +943,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available, ignoring");
|
throw Exception("No viewer available, ignoring");
|
||||||
}
|
}
|
||||||
if (_lib.reveal_mesh(
|
if (reveal_mesh(
|
||||||
_assetManager!, entity, meshName.toNativeUtf8().cast<Char>()) !=
|
_assetManager!, entity, meshName.toNativeUtf8().cast<Char>()) !=
|
||||||
1) {
|
1) {
|
||||||
throw Exception("Failed to reveal mesh $meshName");
|
throw Exception("Failed to reveal mesh $meshName");
|
||||||
@@ -957,7 +952,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String? getNameForEntity(FilamentEntity entity) {
|
String? getNameForEntity(FilamentEntity entity) {
|
||||||
final result = _lib.get_name_for_entity(_assetManager!, entity);
|
final result = get_name_for_entity(_assetManager!, entity);
|
||||||
if (result == nullptr) {
|
if (result == nullptr) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -972,7 +967,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
final outPtr = calloc<EntityId>(1);
|
final outPtr = calloc<EntityId>(1);
|
||||||
outPtr.value = 0;
|
outPtr.value = 0;
|
||||||
|
|
||||||
_lib.pick_ffi(_viewer!, x, textureDetails.value!.height - y, outPtr);
|
pick_ffi(_viewer!, x, textureDetails.value!.height - y, outPtr);
|
||||||
int wait = 0;
|
int wait = 0;
|
||||||
while (outPtr.value == 0) {
|
while (outPtr.value == 0) {
|
||||||
await Future.delayed(const Duration(milliseconds: 32));
|
await Future.delayed(const Duration(milliseconds: 32));
|
||||||
@@ -992,7 +987,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available");
|
throw Exception("No viewer available");
|
||||||
}
|
}
|
||||||
var arrayPtr = _lib.get_camera_view_matrix(_viewer!);
|
var arrayPtr = get_camera_view_matrix(_viewer!);
|
||||||
var viewMatrix = Matrix4.fromList(arrayPtr.asTypedList(16));
|
var viewMatrix = Matrix4.fromList(arrayPtr.asTypedList(16));
|
||||||
calloc.free(arrayPtr);
|
calloc.free(arrayPtr);
|
||||||
return viewMatrix;
|
return viewMatrix;
|
||||||
@@ -1003,7 +998,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available");
|
throw Exception("No viewer available");
|
||||||
}
|
}
|
||||||
var arrayPtr = _lib.get_camera_model_matrix(_viewer!);
|
var arrayPtr = get_camera_model_matrix(_viewer!);
|
||||||
var modelMatrix = Matrix4.fromList(arrayPtr.asTypedList(16));
|
var modelMatrix = Matrix4.fromList(arrayPtr.asTypedList(16));
|
||||||
calloc.free(arrayPtr);
|
calloc.free(arrayPtr);
|
||||||
return modelMatrix;
|
return modelMatrix;
|
||||||
@@ -1014,7 +1009,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available");
|
throw Exception("No viewer available");
|
||||||
}
|
}
|
||||||
var arrayPtr = _lib.get_camera_model_matrix(_viewer!);
|
var arrayPtr = get_camera_model_matrix(_viewer!);
|
||||||
var doubleList = arrayPtr.asTypedList(16);
|
var doubleList = arrayPtr.asTypedList(16);
|
||||||
var modelMatrix = Matrix4.fromFloat64List(doubleList);
|
var modelMatrix = Matrix4.fromFloat64List(doubleList);
|
||||||
|
|
||||||
@@ -1029,7 +1024,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (_viewer == null) {
|
if (_viewer == null) {
|
||||||
throw Exception("No viewer available");
|
throw Exception("No viewer available");
|
||||||
}
|
}
|
||||||
var arrayPtr = _lib.get_camera_model_matrix(_viewer!);
|
var arrayPtr = get_camera_model_matrix(_viewer!);
|
||||||
var doubleList = arrayPtr.asTypedList(16);
|
var doubleList = arrayPtr.asTypedList(16);
|
||||||
var modelMatrix = Matrix4.fromFloat64List(doubleList);
|
var modelMatrix = Matrix4.fromFloat64List(doubleList);
|
||||||
var rotationMatrix = Matrix3.identity();
|
var rotationMatrix = Matrix3.identity();
|
||||||
@@ -1050,7 +1045,7 @@ class FilamentControllerFFI extends FilamentController {
|
|||||||
if (mode != ManipulatorMode.ORBIT) {
|
if (mode != ManipulatorMode.ORBIT) {
|
||||||
throw Exception("Manipulator mode $mode not yet implemented");
|
throw Exception("Manipulator mode $mode not yet implemented");
|
||||||
}
|
}
|
||||||
_lib.set_camera_manipulator_options(
|
set_camera_manipulator_options(
|
||||||
_viewer!, mode.index, orbitSpeedX, orbitSpeedX, zoomSpeed);
|
_viewer!, mode.index, orbitSpeedX, orbitSpeedX, zoomSpeed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -28,7 +28,8 @@ ffigen:
|
|||||||
headers:
|
headers:
|
||||||
entry-points:
|
entry-points:
|
||||||
- 'ios/include/FlutterFilamentFFIApi.h'
|
- 'ios/include/FlutterFilamentFFIApi.h'
|
||||||
|
ffi-native:
|
||||||
|
asset: 'libflutter_filament'
|
||||||
flutter:
|
flutter:
|
||||||
plugin:
|
plugin:
|
||||||
platforms:
|
platforms:
|
||||||
|
|||||||
Reference in New Issue
Block a user