add flush() method on FilamentApp
This commit is contained in:
@@ -256,19 +256,17 @@ abstract class FilamentApp<T> {
|
||||
Future<MaterialInstance> 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<List<(View,Uint8List)>> capture(covariant SwapChain swapChain,
|
||||
{
|
||||
covariant View? view,
|
||||
Future<List<(View, Uint8List)>> 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<T> {
|
||||
///
|
||||
///
|
||||
Future<ThermionAsset> createGeometry(Geometry geometry, T animationManager,
|
||||
{List<MaterialInstance>? materialInstances,
|
||||
bool keepData = false});
|
||||
{List<MaterialInstance>? materialInstances, bool keepData = false});
|
||||
|
||||
///
|
||||
///
|
||||
///
|
||||
Future flush();
|
||||
}
|
||||
|
||||
@@ -681,7 +681,8 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
|
||||
beforeRender?.call(view);
|
||||
|
||||
final viewport = await view.getViewport();
|
||||
final pixelBuffer = Uint8List(viewport.width * viewport.height * 4 * sizeOf<Float>());
|
||||
final pixelBuffer =
|
||||
Uint8List(viewport.width * viewport.height * 4 * sizeOf<Float>());
|
||||
await withVoidCallback((cb) {
|
||||
Renderer_renderRenderThread(
|
||||
renderer,
|
||||
@@ -695,17 +696,18 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
|
||||
}
|
||||
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<Pointer> {
|
||||
///
|
||||
///
|
||||
@override
|
||||
Future<ThermionAsset> createGeometry(Geometry geometry, Pointer animationManager,
|
||||
Future<ThermionAsset> createGeometry(
|
||||
Geometry geometry, Pointer animationManager,
|
||||
{List<MaterialInstance>? materialInstances,
|
||||
bool keepData = false,
|
||||
bool addToScene = true}) async {
|
||||
@@ -903,6 +906,13 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
|
||||
|
||||
return FFIAsset(assetPtr, this, animationManager.cast<TAnimationManager>());
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
///
|
||||
Future flush() async {
|
||||
await withVoidCallback((cb) => Engine_flushAndWaitRenderThead(engine, cb));
|
||||
}
|
||||
}
|
||||
|
||||
class FinalizableUint8List implements Finalizable {
|
||||
|
||||
Reference in New Issue
Block a user