This commit is contained in:
Nick Fisher
2025-03-19 15:42:33 +08:00
parent 102429e090
commit e73cb9c7d6
9 changed files with 20 additions and 3 deletions

View File

@@ -42,6 +42,7 @@ namespace thermion
void setRenderable(filament::SwapChain *swapChain, filament::View **view, uint8_t numViews); void setRenderable(filament::SwapChain *swapChain, filament::View **view, uint8_t numViews);
void addAnimationManager(AnimationManager* animationManager); void addAnimationManager(AnimationManager* animationManager);
void removeAnimationManager(AnimationManager* animationManager); void removeAnimationManager(AnimationManager* animationManager);

View File

@@ -26,6 +26,8 @@ EMSCRIPTEN_KEEPALIVE TEngine *Engine_create(
uint8_t stereoscopicEyeCount, uint8_t stereoscopicEyeCount,
bool disableHandleUseAfterFreeCheck bool disableHandleUseAfterFreeCheck
); );
EMSCRIPTEN_KEEPALIVE TEngine *Engine_destroy(TEngine *tEngine);
EMSCRIPTEN_KEEPALIVE TRenderer *Engine_createRenderer(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_createSwapChain(TEngine *tEngine, void *window, uint64_t flags);
EMSCRIPTEN_KEEPALIVE TSwapChain *Engine_createHeadlessSwapChain(TEngine *tEngine, uint32_t width, uint32_t height, uint64_t flags); EMSCRIPTEN_KEEPALIVE TSwapChain *Engine_createHeadlessSwapChain(TEngine *tEngine, uint32_t width, uint32_t height, uint64_t flags);

View File

@@ -9,6 +9,7 @@ extern "C"
#endif #endif
EMSCRIPTEN_KEEPALIVE TRenderTicker *RenderTicker_create(TRenderer *tRenderer); 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_addAnimationManager(TRenderTicker *tRenderTicker, TAnimationManager *tAnimationManager);
EMSCRIPTEN_KEEPALIVE void RenderTicker_removeAnimationManager(TRenderTicker *tRenderTicker, TAnimationManager *tAnimationManager); EMSCRIPTEN_KEEPALIVE void RenderTicker_removeAnimationManager(TRenderTicker *tRenderTicker, TAnimationManager *tAnimationManager);

View File

@@ -33,6 +33,9 @@ namespace thermion
Scene *scene); Scene *scene);
~AnimationManager(); ~AnimationManager();
/// @brief
///
/// @param frameTimeInNanos
void update(uint64_t frameTimeInNanos); void update(uint64_t frameTimeInNanos);
/// @brief /// @brief

View File

@@ -73,7 +73,7 @@ namespace thermion
std::lock_guard lock(mMutex); std::lock_guard lock(mMutex);
for (auto animationManager : mAnimationManagers) { for (auto animationManager : mAnimationManagers) {
animationManager->update(frameTimeInNanos * 1e-9); animationManager->update(frameTimeInNanos);
} }
for (const auto& [swapChain, views] : mRenderable) for (const auto& [swapChain, views] : mRenderable)

View File

@@ -58,6 +58,11 @@ namespace thermion
return reinterpret_cast<TEngine *>(engine); return reinterpret_cast<TEngine *>(engine);
} }
EMSCRIPTEN_KEEPALIVE void Engine_destroy(TEngine *tEngine) {
auto *engine = reinterpret_cast<Engine *>(tEngine);
Engine::destroy(engine);
}
EMSCRIPTEN_KEEPALIVE TRenderer *Engine_createRenderer(TEngine *tEngine) EMSCRIPTEN_KEEPALIVE TRenderer *Engine_createRenderer(TEngine *tEngine)
{ {
auto *engine = reinterpret_cast<Engine *>(tEngine); auto *engine = reinterpret_cast<Engine *>(tEngine);

View File

@@ -24,6 +24,11 @@ EMSCRIPTEN_KEEPALIVE TRenderTicker *RenderTicker_create(TRenderer *tRenderer) {
return reinterpret_cast<TRenderTicker *>(renderTicker); return reinterpret_cast<TRenderTicker *>(renderTicker);
} }
EMSCRIPTEN_KEEPALIVE void RenderTicker_destroy(TRenderTicker *tRenderTicker,) {
auto *renderTicker = reinterpret_cast<RenderTicker *>(tRenderTicker);
delete renderTicker;
}
EMSCRIPTEN_KEEPALIVE void RenderTicker_addAnimationManager(TRenderTicker *tRenderTicker, TAnimationManager *tAnimationManager) { EMSCRIPTEN_KEEPALIVE void RenderTicker_addAnimationManager(TRenderTicker *tRenderTicker, TAnimationManager *tAnimationManager) {
auto *renderTicker = reinterpret_cast<RenderTicker *>(tRenderTicker); auto *renderTicker = reinterpret_cast<RenderTicker *>(tRenderTicker);
auto *animationManager = reinterpret_cast<thermion::AnimationManager *>(tAnimationManager); auto *animationManager = reinterpret_cast<thermion::AnimationManager *>(tAnimationManager);

View File

@@ -43,7 +43,7 @@ void RenderLoop::iter()
std::unique_lock<std::mutex> lock(_mutex); std::unique_lock<std::mutex> lock(_mutex);
if (_requestFrameRenderCallback) if (_requestFrameRenderCallback)
{ {
mRenderTicker->render(); mRenderTicker->render(0);
lock.unlock(); lock.unlock();
this->_requestFrameRenderCallback(); this->_requestFrameRenderCallback();
this->_requestFrameRenderCallback = nullptr; this->_requestFrameRenderCallback = nullptr;

View File

@@ -474,7 +474,7 @@ namespace thermion
return boneEntities; return boneEntities;
} }
void AnimationManager::update() void AnimationManager::update(uint64_t frameTimeInNanos)
{ {
std::lock_guard lock(_mutex); std::lock_guard lock(_mutex);
_animationComponentManager->update(); _animationComponentManager->update();