From 6472670ec34abf3e2caa1578d74bce6df1e8ce34 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Mon, 4 Nov 2024 08:35:19 +0800 Subject: [PATCH] add createRenderTargetRenderThread --- .../lib/src/viewer/src/ffi/src/thermion_dart.g.dart | 13 +++++++++++++ .../src/viewer/src/ffi/src/thermion_viewer_ffi.dart | 6 ++++-- .../native/include/ThermionDartRenderThreadApi.h | 1 + .../native/src/ThermionDartRenderThreadApi.cpp | 10 ++++++++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/thermion_dart/lib/src/viewer/src/ffi/src/thermion_dart.g.dart b/thermion_dart/lib/src/viewer/src/ffi/src/thermion_dart.g.dart index f0afabe2..7e69306f 100644 --- a/thermion_dart/lib/src/viewer/src/ffi/src/thermion_dart.g.dart +++ b/thermion_dart/lib/src/viewer/src/ffi/src/thermion_dart.g.dart @@ -1487,6 +1487,19 @@ external void Viewer_captureRenderTargetRenderThread( ffi.Pointer> onComplete, ); +@ffi.Native< + ffi.Pointer Function( + ffi.Pointer, ffi.IntPtr, ffi.Uint32, ffi.Uint32, + ffi.Pointer)>> + )>(isLeaf: true) +external ffi.Pointer Viewer_createRenderTargetRenderThread( + ffi.Pointer viewer, + int texture, + int width, + int height, + ffi.Pointer)>> onComplete, +); + @ffi.Native< ffi.Void Function(ffi.Pointer, ffi.Pointer>)>(isLeaf: true) 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 e7b5c5b2..42c51abd 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 @@ -101,8 +101,10 @@ class ThermionViewerFFI extends ThermionViewer { /// Future createRenderTarget( int width, int height, int textureHandle) async { - final renderTarget = - Viewer_createRenderTarget(_viewer!, textureHandle, width, height); + final renderTarget = await withPointerCallback((cb) { + Viewer_createRenderTargetRenderThread(_viewer!, textureHandle, width, height, cb); + }); + return FFIRenderTarget(renderTarget, _viewer!); } diff --git a/thermion_dart/native/include/ThermionDartRenderThreadApi.h b/thermion_dart/native/include/ThermionDartRenderThreadApi.h index dc044a3e..5d4007e5 100644 --- a/thermion_dart/native/include/ThermionDartRenderThreadApi.h +++ b/thermion_dart/native/include/ThermionDartRenderThreadApi.h @@ -36,6 +36,7 @@ extern "C" EMSCRIPTEN_KEEPALIVE void Viewer_captureRenderTargetRenderThread(TViewer *viewer, TView* view, TSwapChain* swapChain, TRenderTarget* renderTarget, uint8_t* out, void (*onComplete)()); EMSCRIPTEN_KEEPALIVE void Viewer_requestFrameRenderThread(TViewer *viewer, void(*onComplete)()); EMSCRIPTEN_KEEPALIVE void Viewer_loadIblRenderThread(TViewer *viewer, const char *iblPath, float intensity, void(*onComplete)()); + EMSCRIPTEN_KEEPALIVE void Viewer_createRenderTargetRenderThread(TViewer *viewer, intptr_t texture, uint32_t width, uint32_t height, void(*onComplete)(TRenderTarget*)); EMSCRIPTEN_KEEPALIVE void View_setToneMappingRenderThread(TView *tView, TEngine *tEngine, thermion::ToneMapping toneMapping); EMSCRIPTEN_KEEPALIVE void View_setBloomRenderThread(TView *tView, double bloom); diff --git a/thermion_dart/native/src/ThermionDartRenderThreadApi.cpp b/thermion_dart/native/src/ThermionDartRenderThreadApi.cpp index dfdeb534..fd910680 100644 --- a/thermion_dart/native/src/ThermionDartRenderThreadApi.cpp +++ b/thermion_dart/native/src/ThermionDartRenderThreadApi.cpp @@ -263,6 +263,16 @@ extern "C" auto fut = _rl->add_task(lambda); } + EMSCRIPTEN_KEEPALIVE void Viewer_createRenderTargetRenderThread(TViewer *viewer, intptr_t texture, uint32_t width, uint32_t height, void(*onComplete)(TRenderTarget*)) { + std::packaged_task lambda( + [=]() mutable + { + auto renderTarget = Viewer_createRenderTarget(viewer, texture, width, height); + onComplete(renderTarget); + }); + auto fut = _rl->add_task(lambda); + } + EMSCRIPTEN_KEEPALIVE void set_frame_interval_render_thread(TViewer *viewer, float frameIntervalInMilliseconds) {