diff --git a/thermion_dart/lib/src/bindings/src/ffi.dart b/thermion_dart/lib/src/bindings/src/ffi.dart index f271ca65..2fbb0256 100644 --- a/thermion_dart/lib/src/bindings/src/ffi.dart +++ b/thermion_dart/lib/src/bindings/src/ffi.dart @@ -97,7 +97,7 @@ late NativeCallable _voidCallbackNativeCallable = NativeCallable.listener(_voidCallbackHandler); Future withVoidCallback( - Function(int, Pointer>) func) async { + Function(int, Pointer>) func) async { var requestId = _requestId; _requestId++; final completer = Completer(); @@ -107,7 +107,6 @@ Future withVoidCallback( func.call(requestId, _voidCallbackNativeCallable.nativeFunction.cast()); await completer.future; - // nativeCallable.close(); } Future> withPointerCallback( diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart index fb8a9887..f4fb5c8b 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart @@ -227,8 +227,8 @@ class FFIFilamentApp extends FilamentApp { for (final swapChain in _swapChains.keys.toList()) { await destroySwapChain(swapChain); } - await withVoidCallback((cb) async { - Engine_destroyRenderThread(engine, cb); + await withVoidCallback((requestId, cb) async { + Engine_destroyRenderThread(engine, requestId, cb); }); RenderThread_destroy(); @@ -248,7 +248,7 @@ class FFIFilamentApp extends FilamentApp { /// Future destroyAsset(covariant FFIAsset asset) async { await withVoidCallback( - (cb) => SceneAsset_destroyRenderThread(asset.asset, cb)); + (requestId, cb) => SceneAsset_destroyRenderThread(asset.asset, requestId, cb)); await asset.dispose(); } @@ -536,22 +536,23 @@ class FFIFilamentApp extends FilamentApp { Renderer_beginFrameRenderThread( renderer, swapchain.swapChain, 0.toBigInt, cb); }); - await withVoidCallback((cb) { + await withVoidCallback((requestId, cb) { Renderer_renderRenderThread( renderer, view.view, + requestId, cb, ); }); - await withVoidCallback((cb) { - Renderer_endFrameRenderThread(renderer, cb); + await withVoidCallback((requestId, cb) { + Renderer_endFrameRenderThread(renderer, requestId, cb); }); if (FILAMENT_SINGLE_THREADED) { - await withVoidCallback((cb) => Engine_executeRenderThread(engine, cb)); + await withVoidCallback((requestId, cb) => Engine_executeRenderThread(engine, requestId, cb)); } else { await withVoidCallback( - (cb) => Engine_flushAndWaitRenderThread(engine, cb)); + (requestId, cb) => Engine_flushAndWaitRenderThread(engine, requestId, cb)); } } @@ -723,10 +724,11 @@ class FFIFilamentApp extends FilamentApp { final viewport = await view.getViewport(); final pixelBuffer = Uint8List(viewport.width * viewport.height * 4 * sizeOf()); - await withVoidCallback((cb) { + await withVoidCallback((requestId, cb) { Renderer_renderRenderThread( renderer, view.view, + requestId, cb, ); }); @@ -734,7 +736,7 @@ class FFIFilamentApp extends FilamentApp { if (captureRenderTarget && view.renderTarget == null) { throw Exception(); } - await withVoidCallback((cb) { + await withVoidCallback((requestId, cb) { Renderer_readPixelsRenderThread( renderer, view.view, @@ -749,20 +751,21 @@ class FFIFilamentApp extends FilamentApp { pixelDataType.value, pixelBuffer.address, pixelBuffer.length, + requestId, cb); }); pixelBuffers.add((view, pixelBuffer)); } - await withVoidCallback((cb) { - Renderer_endFrameRenderThread(renderer, cb); + await withVoidCallback((requestId, cb) { + Renderer_endFrameRenderThread(renderer, requestId, cb); }); - await withVoidCallback((cb) { + await withVoidCallback((requestId, cb) { if (FILAMENT_SINGLE_THREADED) { - Engine_executeRenderThread(engine, cb); + Engine_executeRenderThread(engine, requestId, cb); } else { - Engine_flushAndWaitRenderThread(engine, cb); + Engine_flushAndWaitRenderThread(engine, requestId, cb); } }); return pixelBuffers; @@ -823,12 +826,13 @@ class FFIFilamentApp extends FilamentApp { resources.add(FinalizableUint8List(resourceUris[i], resourceData)); - await withVoidCallback((cb) => + await withVoidCallback((requestId, cb) => GltfResourceLoader_addResourceDataRenderThread( gltfResourceLoader, resourceUris[i], resourceData.address, resourceData.lengthInBytes, + requestId, cb)); } @@ -864,8 +868,8 @@ class FFIFilamentApp extends FilamentApp { SceneAsset_createFromFilamentAssetRenderThread(engine, gltfAssetLoader, nameComponentManager, filamentAsset, cb)); - await withVoidCallback((cb) => GltfResourceLoader_destroyRenderThread( - engine, gltfResourceLoader, cb)); + await withVoidCallback((requestId, cb) => GltfResourceLoader_destroyRenderThread( + engine, gltfResourceLoader, requestId, cb)); return FFIAsset(asset, this, animationManager.cast()); } finally { @@ -883,10 +887,10 @@ class FFIFilamentApp extends FilamentApp { View_setColorGrading(view.view, nullptr); for (final cg in view.colorGrading.entries) { await withVoidCallback( - (cb) => Engine_destroyColorGradingRenderThread(engine, cg.value, cb)); + (requestId, cb) => Engine_destroyColorGradingRenderThread(engine, cg.value, requestId, cb)); } await withVoidCallback( - (cb) => Engine_destroyViewRenderThread(engine, view.view, cb)); + (requestId, cb) => Engine_destroyViewRenderThread(engine, view.view, requestId, cb)); for (final swapchain in _swapChains.keys) { if (_swapChains[swapchain]!.contains(view)) { _swapChains[swapchain]!.remove(view); @@ -898,7 +902,7 @@ class FFIFilamentApp extends FilamentApp { Future destroyScene(covariant FFIScene scene) async { await withVoidCallback( - (cb) => Engine_destroySceneRenderThread(engine, scene.scene, cb)); + (requestId, cb) => Engine_destroySceneRenderThread(engine, scene.scene, requestId, cb)); } Future> createColorGrading(ToneMapper mapper) async { @@ -1024,10 +1028,10 @@ class FFIFilamentApp extends FilamentApp { /// Future flush() async { if (FILAMENT_SINGLE_THREADED) { - await withVoidCallback((cb) => Engine_executeRenderThread(engine, cb)); + await withVoidCallback((requestId, cb) => Engine_executeRenderThread(engine, requestId, cb)); } else { await withVoidCallback( - (cb) => Engine_flushAndWaitRenderThread(engine, cb)); + (requestId, cb) => Engine_flushAndWaitRenderThread(engine, requestId, cb)); } } diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_material.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_material.dart index 0e8c2e76..373b2168 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_material.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_material.dart @@ -18,8 +18,8 @@ class FFIMaterial extends Material { } Future destroy() async { - await withVoidCallback((cb) { - Engine_destroyMaterialRenderThread(app.engine, pointer, cb); + await withVoidCallback((requestId, cb) { + Engine_destroyMaterialRenderThread(app.engine, pointer, requestId, cb); }); } @@ -168,8 +168,8 @@ class FFIMaterialInstance extends MaterialInstance { } Future destroy() async { - await withVoidCallback((cb) { - Engine_destroyMaterialInstanceRenderThread(app.engine, this.pointer, cb); + await withVoidCallback((requestId, cb) { + Engine_destroyMaterialInstanceRenderThread(app.engine, this.pointer, requestId, cb); }); } diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_render_target.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_render_target.dart index 4599e76f..a5fb745f 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_render_target.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_render_target.dart @@ -23,6 +23,6 @@ class FFIRenderTarget extends RenderTarget { @override Future destroy() async { - await withVoidCallback((cb) => RenderTarget_destroyRenderThread(app.engine, renderTarget, cb)); + await withVoidCallback((requestId, cb) => RenderTarget_destroyRenderThread(app.engine, renderTarget, requestId, cb)); } } diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_texture.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_texture.dart index 67ba96cd..489e2f31 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_texture.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_texture.dart @@ -30,8 +30,8 @@ class FFITexture extends Texture { @override Future dispose() async { - await withVoidCallback((cb) { - Engine_destroyTextureRenderThread(_engine, pointer, cb); + await withVoidCallback((requestId, cb) { + Engine_destroyTextureRenderThread(_engine, pointer, requestId,cb); }); } @@ -183,8 +183,8 @@ class FFILinearImage extends LinearImage { } Future destroy() async { - await withVoidCallback((cb) { - Image_destroyRenderThread(this.pointer, cb); + await withVoidCallback((requestId, cb) { + Image_destroyRenderThread(this.pointer, requestId, cb); }); } @@ -316,8 +316,8 @@ class FFITextureSampler extends TextureSampler { // } Future setAnisotropy(double anisotropy) async { - await withVoidCallback((cb) { - TextureSampler_setAnisotropyRenderThread(pointer, anisotropy, cb); + await withVoidCallback((requestId,cb) { + TextureSampler_setAnisotropyRenderThread(pointer, anisotropy, requestId,cb); }); } @@ -334,8 +334,8 @@ class FFITextureSampler extends TextureSampler { @override Future dispose() async { - await withVoidCallback((cb) { - TextureSampler_destroyRenderThread(pointer, cb); + await withVoidCallback((requestId,cb) { + TextureSampler_destroyRenderThread(pointer, requestId,cb); }); } } diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_view.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_view.dart index adfa312e..9bbce28a 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_view.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_view.dart @@ -113,8 +113,8 @@ class FFIView extends View { @override Future setBloom(bool enabled, double strength) async { - await withVoidCallback((cb) { - View_setBloomRenderThread(view, enabled, strength, cb); + await withVoidCallback((requestId,cb) { + View_setBloomRenderThread(view, enabled, strength, requestId,cb); }); } diff --git a/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart b/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart index 8078e006..4570de96 100644 --- a/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart +++ b/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart @@ -116,14 +116,14 @@ class ThermionViewerFFI extends ThermionViewer { /// @override Future render() async { - await withVoidCallback((cb) => - RenderTicker_renderRenderThread(app.renderTicker, 0.toBigInt, cb)); + await withVoidCallback((requestId,cb) => + RenderTicker_renderRenderThread(app.renderTicker, 0.toBigInt, requestId,cb)); if (FILAMENT_SINGLE_THREADED) { await withVoidCallback( - (cb) => Engine_executeRenderThread(app.engine, cb)); + (requestId,cb) => Engine_executeRenderThread(app.engine, requestId,cb)); } else { await withVoidCallback( - (cb) => Engine_flushAndWaitRenderThread(app.engine, cb)); + (requestId,cb) => Engine_flushAndWaitRenderThread(app.engine, requestId,cb)); } } @@ -301,7 +301,7 @@ class ThermionViewerFFI extends ThermionViewer { if (skybox != null) { await withVoidCallback( - (cb) => Engine_destroySkyboxRenderThread(app.engine, skybox!, cb)); + (requestId,cb) => Engine_destroySkyboxRenderThread(app.engine, skybox!, requestId,cb)); skybox = null; } } @@ -313,8 +313,8 @@ class ThermionViewerFFI extends ThermionViewer { Future removeIbl() async { if (indirectLight != null) { Scene_setIndirectLight(scene.scene, nullptr); - await withVoidCallback((cb) => Engine_destroyIndirectLightRenderThread( - app.engine, indirectLight!, cb)); + await withVoidCallback((requestId,cb) => Engine_destroyIndirectLightRenderThread( + app.engine, indirectLight!, requestId,cb)); indirectLight = null; } }