more FFI work

This commit is contained in:
Nick Fisher
2023-09-29 14:55:40 +08:00
parent a6506e6346
commit dd88c45536
10 changed files with 221 additions and 546 deletions

View File

@@ -103,15 +103,34 @@ class FilamentControllerFFI extends FilamentController {
}
size = ui.Size(width * _pixelRatio, height * _pixelRatio);
_textureId =
var textures =
await _channel.invokeMethod("createTexture", [size.width, size.height]);
var flutterTextureId = textures[0];
_textureId = flutterTextureId;
var pixelBuffer = textures[1] as int;
var nativeTexture = textures[2] as int;
var renderCallbackResult = await _channel.invokeMethod("getRenderCallback");
var renderCallback =
Pointer<NativeFunction<Void Function(Pointer<Void>)>>.fromAddress(
renderCallbackResult[0]);
var renderCallbackOwner =
Pointer<Void>.fromAddress(renderCallbackResult[1]);
var sharedContext = await _channel.invokeMethod("getSharedContext");
var loader = await _channel.invokeMethod("getResourceLoaderWrapper");
_viewer = _lib.create_filament_viewer_ffi(
Pointer<Void>.fromAddress(sharedContext ?? 0),
Pointer<ResourceLoaderWrapper>.fromAddress(loader));
Pointer<ResourceLoaderWrapper>.fromAddress(loader),
renderCallback,
renderCallbackOwner);
_lib.create_swap_chain(
_viewer!, Pointer<Void>.fromAddress(pixelBuffer), width, height);
_lib.create_render_target(_viewer!, nativeTexture, width, height);
_lib.update_viewport_and_camera_projection_ffi(
_viewer!, width, height, 1.0);

View File

@@ -1278,22 +1278,82 @@ class NativeLibrary {
ffi.Pointer<ffi.Void> create_filament_viewer_ffi(
ffi.Pointer<ffi.Void> context,
ffi.Pointer<ResourceLoaderWrapper> loader,
ffi.Pointer<
ffi.NativeFunction<
ffi.Void Function(ffi.Pointer<ffi.Void> renderCallbackOwner)>>
renderCallback,
ffi.Pointer<ffi.Void> renderCallbackOwner,
) {
return _create_filament_viewer_ffi(
context,
loader,
renderCallback,
renderCallbackOwner,
);
}
late final _create_filament_viewer_ffiPtr = _lookup<
ffi.NativeFunction<
ffi.Pointer<ffi.Void> Function(
ffi.Pointer<ffi.Void>, ffi.Pointer<ResourceLoaderWrapper>)>>(
'create_filament_viewer_ffi');
ffi.NativeFunction<
ffi.Pointer<ffi.Void> Function(
ffi.Pointer<ffi.Void>,
ffi.Pointer<ResourceLoaderWrapper>,
ffi.Pointer<
ffi.NativeFunction<
ffi.Void Function(
ffi.Pointer<ffi.Void> renderCallbackOwner)>>,
ffi.Pointer<ffi.Void>)>>('create_filament_viewer_ffi');
late final _create_filament_viewer_ffi =
_create_filament_viewer_ffiPtr.asFunction<
ffi.Pointer<ffi.Void> Function(
ffi.Pointer<ffi.Void>, ffi.Pointer<ResourceLoaderWrapper>)>();
ffi.Pointer<ffi.Void>,
ffi.Pointer<ResourceLoaderWrapper>,
ffi.Pointer<
ffi.NativeFunction<
ffi.Void Function(
ffi.Pointer<ffi.Void> renderCallbackOwner)>>,
ffi.Pointer<ffi.Void>)>();
void create_swap_chain_ffi(
ffi.Pointer<ffi.Void> viewer,
ffi.Pointer<ffi.Void> surface,
int width,
int height,
) {
return _create_swap_chain_ffi(
viewer,
surface,
width,
height,
);
}
late final _create_swap_chain_ffiPtr = _lookup<
ffi.NativeFunction<
ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Void>,
ffi.Uint32, ffi.Uint32)>>('create_swap_chain_ffi');
late final _create_swap_chain_ffi = _create_swap_chain_ffiPtr.asFunction<
void Function(ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Void>, int, int)>();
void create_render_target_ffi(
ffi.Pointer<ffi.Void> viewer,
int nativeTextureId,
int width,
int height,
) {
return _create_render_target_ffi(
viewer,
nativeTextureId,
width,
height,
);
}
late final _create_render_target_ffiPtr = _lookup<
ffi.NativeFunction<
ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Uint32, ffi.Uint32,
ffi.Uint32)>>('create_render_target_ffi');
late final _create_render_target_ffi = _create_render_target_ffiPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>, int, int, int)>();
void destroy_filament_viewer_ffi(
ffi.Pointer<ffi.Void> viewer,
@@ -1376,27 +1436,6 @@ class NativeLibrary {
_update_viewport_and_camera_projection_ffiPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>, int, int, double)>();
void create_render_target_ffi(
ffi.Pointer<ffi.Void> viewer,
int textureId,
int width,
int height,
) {
return _create_render_target_ffi(
viewer,
textureId,
width,
height,
);
}
late final _create_render_target_ffiPtr = _lookup<
ffi.NativeFunction<
ffi.Void Function(ffi.Pointer<ffi.Void>, ffi.Uint32, ffi.Uint32,
ffi.Uint32)>>('create_render_target_ffi');
late final _create_render_target_ffi = _create_render_target_ffiPtr
.asFunction<void Function(ffi.Pointer<ffi.Void>, int, int, int)>();
void set_background_color_ffi(
ffi.Pointer<ffi.Void> viewer,
double r,