From 86e0f7740f0ff30f65f227f8c10eb0ab940b6e5b Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Wed, 18 Jun 2025 13:03:34 +0800 Subject: [PATCH] add Fence_waitAndDestroyRenderThread --- .../include/c_api/ThermionDartRenderThreadApi.h | 1 + .../native/src/c_api/ThermionDartRenderThreadApi.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/thermion_dart/native/include/c_api/ThermionDartRenderThreadApi.h b/thermion_dart/native/include/c_api/ThermionDartRenderThreadApi.h index 7148d9cd..9c18db89 100644 --- a/thermion_dart/native/include/c_api/ThermionDartRenderThreadApi.h +++ b/thermion_dart/native/include/c_api/ThermionDartRenderThreadApi.h @@ -64,6 +64,7 @@ namespace thermion void Engine_destroyTextureRenderThread(TEngine *engine, TTexture* tTexture, uint32_t requestId, VoidCallback onComplete); void Engine_createFenceRenderThread(TEngine *tEngine, void (*onComplete)(TFence*)); + void Fence_waitAndDestroyRenderThread(TFence *tFence, uint32_t requestId, VoidCallback onComplete); void Engine_destroyFenceRenderThread(TEngine *tEngine, TFence *tFence, uint32_t requestId, VoidCallback onComplete); void Engine_flushAndWaitRenderThread(TEngine *tEngine, uint32_t requestId, VoidCallback onComplete); void Engine_executeRenderThread(TEngine *tEngine, uint32_t requestId, VoidCallback onComplete); diff --git a/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp b/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp index 9da96059..4709565f 100644 --- a/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp +++ b/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp @@ -310,6 +310,18 @@ extern "C" auto fut = _renderThread->add_task(lambda); } + EMSCRIPTEN_KEEPALIVE void Fence_waitAndDestroyRenderThread(TFence *tFence, uint32_t requestId, VoidCallback onComplete) + { + + std::packaged_task lambda( + [=]() mutable + { + Fence_waitAndDestroy(tFence); + PROXY(onComplete(requestId)); + }); + auto fut = _renderThread->add_task(lambda); + } + EMSCRIPTEN_KEEPALIVE void Engine_destroyFenceRenderThread(TEngine *tEngine, TFence *tFence, uint32_t requestId, VoidCallback onComplete) { std::packaged_task lambda(