diff --git a/thermion_dart/lib/src/filament/src/filament_app.dart b/thermion_dart/lib/src/filament/src/filament_app.dart index e50c2568..f1494331 100644 --- a/thermion_dart/lib/src/filament/src/filament_app.dart +++ b/thermion_dart/lib/src/filament/src/filament_app.dart @@ -256,19 +256,17 @@ abstract class FilamentApp { Future createImageMaterialInstance(); /// - /// Returns pixel buffer(s) for [view] (or, if null, all views associated + /// Returns pixel buffer(s) for [view] (or, if null, all views associated /// with [swapChain] by calling [register]). - /// + /// /// Pixel buffers will be returned in RGBA float32 format. /// - Future> capture(covariant SwapChain swapChain, - { - covariant View? view, + Future> capture(covariant SwapChain swapChain, + {covariant View? view, bool captureRenderTarget = false, PixelDataFormat pixelDataFormat = PixelDataFormat.RGBA, PixelDataType pixelDataType = PixelDataType.UBYTE, - Future Function(View)? beforeRender} - ); + Future Function(View)? beforeRender}); /// /// @@ -302,7 +300,10 @@ abstract class FilamentApp { /// /// Future createGeometry(Geometry geometry, T animationManager, - {List? materialInstances, - bool keepData = false}); + {List? materialInstances, bool keepData = false}); + /// + /// + /// + Future flush(); } diff --git a/thermion_dart/lib/src/viewer/src/ffi/src/ffi_filament_app.dart b/thermion_dart/lib/src/viewer/src/ffi/src/ffi_filament_app.dart index d28fff6a..7b03bb7f 100644 --- a/thermion_dart/lib/src/viewer/src/ffi/src/ffi_filament_app.dart +++ b/thermion_dart/lib/src/viewer/src/ffi/src/ffi_filament_app.dart @@ -681,7 +681,8 @@ class FFIFilamentApp extends FilamentApp { beforeRender?.call(view); final viewport = await view.getViewport(); - final pixelBuffer = Uint8List(viewport.width * viewport.height * 4 * sizeOf()); + final pixelBuffer = + Uint8List(viewport.width * viewport.height * 4 * sizeOf()); await withVoidCallback((cb) { Renderer_renderRenderThread( renderer, @@ -695,17 +696,18 @@ class FFIFilamentApp extends FilamentApp { } await withVoidCallback((cb) { Renderer_readPixelsRenderThread( - renderer, - view.view, - view.renderTarget == null ? nullptr : view.renderTarget!.renderTarget, - // TPixelDataFormat.PIXELDATAFORMAT_RGBA, - // TPixelDataType.PIXELDATATYPE_UBYTE, - pixelDataFormat.value, - pixelDataType.value, - pixelBuffer.address, - pixelBuffer.length, - cb - ); + renderer, + view.view, + view.renderTarget == null + ? nullptr + : view.renderTarget!.renderTarget, + // TPixelDataFormat.PIXELDATAFORMAT_RGBA, + // TPixelDataType.PIXELDATATYPE_UBYTE, + pixelDataFormat.value, + pixelDataType.value, + pixelBuffer.address, + pixelBuffer.length, + cb); }); pixelBuffers.add((view, pixelBuffer)); } @@ -866,7 +868,8 @@ class FFIFilamentApp extends FilamentApp { /// /// @override - Future createGeometry(Geometry geometry, Pointer animationManager, + Future createGeometry( + Geometry geometry, Pointer animationManager, {List? materialInstances, bool keepData = false, bool addToScene = true}) async { @@ -903,6 +906,13 @@ class FFIFilamentApp extends FilamentApp { return FFIAsset(assetPtr, this, animationManager.cast()); } + + /// + /// + /// + Future flush() async { + await withVoidCallback((cb) => Engine_flushAndWaitRenderThead(engine, cb)); + } } class FinalizableUint8List implements Finalizable {