diff --git a/thermion_dart/lib/src/viewer/src/ffi/src/ffi_render_target.dart b/thermion_dart/lib/src/viewer/src/ffi/src/ffi_render_target.dart index ab5c3ffb..0c8b7909 100644 --- a/thermion_dart/lib/src/viewer/src/ffi/src/ffi_render_target.dart +++ b/thermion_dart/lib/src/viewer/src/ffi/src/ffi_render_target.dart @@ -1,5 +1,3 @@ -import 'dart:ffi'; - import 'package:thermion_dart/src/viewer/src/ffi/src/callbacks.dart'; import 'package:thermion_dart/src/viewer/src/ffi/src/ffi_filament_app.dart'; import 'package:thermion_dart/src/viewer/src/ffi/src/ffi_texture.dart'; @@ -25,6 +23,6 @@ class FFIRenderTarget extends RenderTarget { @override Future destroy() async { - await withVoidCallback((cb) => RenderTarget_destroy(app.engine, renderTarget)); + await withVoidCallback((cb) => RenderTarget_destroyRenderThread(app.engine, renderTarget, cb)); } } diff --git a/thermion_dart/native/include/c_api/ThermionDartRenderThreadApi.h b/thermion_dart/native/include/c_api/ThermionDartRenderThreadApi.h index ee5c3fea..19477414 100644 --- a/thermion_dart/native/include/c_api/ThermionDartRenderThreadApi.h +++ b/thermion_dart/native/include/c_api/ThermionDartRenderThreadApi.h @@ -186,6 +186,12 @@ namespace thermion TTexture *depth, void (*onComplete)(TRenderTarget *) ); + EMSCRIPTEN_KEEPALIVE void RenderTarget_destroyRenderThread( + TEngine *tEngine, + TRenderTarget *tRenderTarget, + void (*onComplete)() + ); + // TextureSampler methods EMSCRIPTEN_KEEPALIVE void TextureSampler_createRenderThread(void (*onComplete)(TTextureSampler*)); diff --git a/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp b/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp index f71abe34..a391a402 100644 --- a/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp +++ b/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp @@ -784,7 +784,19 @@ EMSCRIPTEN_KEEPALIVE void SceneAsset_createFromFilamentAssetRenderThread( auto fut = _renderThread->add_task(lambda); } - + EMSCRIPTEN_KEEPALIVE void RenderTarget_destroyRenderThread( + TEngine *tEngine, + TRenderTarget *tRenderTarget, + void (*onComplete)() + ) { + std::packaged_task lambda( + [=]() mutable + { + RenderTarget_destroy(tEngine, tRenderTarget); + onComplete(); + }); + auto fut = _renderThread->add_task(lambda); + } EMSCRIPTEN_KEEPALIVE void TextureSampler_createRenderThread(void (*onComplete)(TTextureSampler *))