diff --git a/thermion_dart/native/include/RenderTicker.hpp b/thermion_dart/native/include/RenderTicker.hpp index 205851a3..ae814f28 100644 --- a/thermion_dart/native/include/RenderTicker.hpp +++ b/thermion_dart/native/include/RenderTicker.hpp @@ -42,6 +42,7 @@ namespace thermion void setRenderable(filament::SwapChain *swapChain, filament::View **view, uint8_t numViews); void addAnimationManager(AnimationManager* animationManager); + void removeAnimationManager(AnimationManager* animationManager); diff --git a/thermion_dart/native/include/c_api/TEngine.h b/thermion_dart/native/include/c_api/TEngine.h index 0ccd23fc..edcbcda6 100644 --- a/thermion_dart/native/include/c_api/TEngine.h +++ b/thermion_dart/native/include/c_api/TEngine.h @@ -26,6 +26,8 @@ EMSCRIPTEN_KEEPALIVE TEngine *Engine_create( uint8_t stereoscopicEyeCount, bool disableHandleUseAfterFreeCheck ); + +EMSCRIPTEN_KEEPALIVE TEngine *Engine_destroy(TEngine *tEngine); EMSCRIPTEN_KEEPALIVE TRenderer *Engine_createRenderer(TEngine *tEngine); EMSCRIPTEN_KEEPALIVE TSwapChain *Engine_createSwapChain(TEngine *tEngine, void *window, uint64_t flags); EMSCRIPTEN_KEEPALIVE TSwapChain *Engine_createHeadlessSwapChain(TEngine *tEngine, uint32_t width, uint32_t height, uint64_t flags); diff --git a/thermion_dart/native/include/c_api/TRenderTicker.h b/thermion_dart/native/include/c_api/TRenderTicker.h index 06733ef4..80d972b3 100644 --- a/thermion_dart/native/include/c_api/TRenderTicker.h +++ b/thermion_dart/native/include/c_api/TRenderTicker.h @@ -9,6 +9,7 @@ extern "C" #endif EMSCRIPTEN_KEEPALIVE TRenderTicker *RenderTicker_create(TRenderer *tRenderer); + EMSCRIPTEN_KEEPALIVE void RenderTicker_destroy(TRenderTicker *tRenderTicker); EMSCRIPTEN_KEEPALIVE void RenderTicker_addAnimationManager(TRenderTicker *tRenderTicker, TAnimationManager *tAnimationManager); EMSCRIPTEN_KEEPALIVE void RenderTicker_removeAnimationManager(TRenderTicker *tRenderTicker, TAnimationManager *tAnimationManager); diff --git a/thermion_dart/native/include/scene/AnimationManager.hpp b/thermion_dart/native/include/scene/AnimationManager.hpp index e5f83e02..3936c1ee 100644 --- a/thermion_dart/native/include/scene/AnimationManager.hpp +++ b/thermion_dart/native/include/scene/AnimationManager.hpp @@ -33,6 +33,9 @@ namespace thermion Scene *scene); ~AnimationManager(); + /// @brief + /// + /// @param frameTimeInNanos void update(uint64_t frameTimeInNanos); /// @brief diff --git a/thermion_dart/native/src/RenderTicker.cpp b/thermion_dart/native/src/RenderTicker.cpp index ffc9f310..3d7df5ca 100644 --- a/thermion_dart/native/src/RenderTicker.cpp +++ b/thermion_dart/native/src/RenderTicker.cpp @@ -73,7 +73,7 @@ namespace thermion std::lock_guard lock(mMutex); for (auto animationManager : mAnimationManagers) { - animationManager->update(frameTimeInNanos * 1e-9); + animationManager->update(frameTimeInNanos); } for (const auto& [swapChain, views] : mRenderable) diff --git a/thermion_dart/native/src/c_api/TEngine.cpp b/thermion_dart/native/src/c_api/TEngine.cpp index 6271a5bf..62343ab6 100644 --- a/thermion_dart/native/src/c_api/TEngine.cpp +++ b/thermion_dart/native/src/c_api/TEngine.cpp @@ -58,6 +58,11 @@ namespace thermion return reinterpret_cast(engine); } + EMSCRIPTEN_KEEPALIVE void Engine_destroy(TEngine *tEngine) { + auto *engine = reinterpret_cast(tEngine); + Engine::destroy(engine); + } + EMSCRIPTEN_KEEPALIVE TRenderer *Engine_createRenderer(TEngine *tEngine) { auto *engine = reinterpret_cast(tEngine); diff --git a/thermion_dart/native/src/c_api/TRenderTicker.cpp b/thermion_dart/native/src/c_api/TRenderTicker.cpp index e96d0c93..ea6447ea 100644 --- a/thermion_dart/native/src/c_api/TRenderTicker.cpp +++ b/thermion_dart/native/src/c_api/TRenderTicker.cpp @@ -24,6 +24,11 @@ EMSCRIPTEN_KEEPALIVE TRenderTicker *RenderTicker_create(TRenderer *tRenderer) { return reinterpret_cast(renderTicker); } +EMSCRIPTEN_KEEPALIVE void RenderTicker_destroy(TRenderTicker *tRenderTicker,) { + auto *renderTicker = reinterpret_cast(tRenderTicker); + delete renderTicker; +} + EMSCRIPTEN_KEEPALIVE void RenderTicker_addAnimationManager(TRenderTicker *tRenderTicker, TAnimationManager *tAnimationManager) { auto *renderTicker = reinterpret_cast(tRenderTicker); auto *animationManager = reinterpret_cast(tAnimationManager); diff --git a/thermion_dart/native/src/rendering/RenderLoop.cpp b/thermion_dart/native/src/rendering/RenderLoop.cpp index 83f95ff5..385cb75c 100644 --- a/thermion_dart/native/src/rendering/RenderLoop.cpp +++ b/thermion_dart/native/src/rendering/RenderLoop.cpp @@ -43,7 +43,7 @@ void RenderLoop::iter() std::unique_lock lock(_mutex); if (_requestFrameRenderCallback) { - mRenderTicker->render(); + mRenderTicker->render(0); lock.unlock(); this->_requestFrameRenderCallback(); this->_requestFrameRenderCallback = nullptr; diff --git a/thermion_dart/native/src/scene/AnimationManager.cpp b/thermion_dart/native/src/scene/AnimationManager.cpp index eb7075b6..1c8e67d8 100644 --- a/thermion_dart/native/src/scene/AnimationManager.cpp +++ b/thermion_dart/native/src/scene/AnimationManager.cpp @@ -474,7 +474,7 @@ namespace thermion return boneEntities; } - void AnimationManager::update() + void AnimationManager::update(uint64_t frameTimeInNanos) { std::lock_guard lock(_mutex); _animationComponentManager->update();