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 addAnimationManager(AnimationManager* animationManager);
void removeAnimationManager(AnimationManager* animationManager);

View File

@@ -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);

View File

@@ -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);

View File

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

View File

@@ -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)

View File

@@ -58,6 +58,11 @@ namespace thermion
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)
{
auto *engine = reinterpret_cast<Engine *>(tEngine);

View File

@@ -24,6 +24,11 @@ EMSCRIPTEN_KEEPALIVE TRenderTicker *RenderTicker_create(TRenderer *tRenderer) {
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) {
auto *renderTicker = reinterpret_cast<RenderTicker *>(tRenderTicker);
auto *animationManager = reinterpret_cast<thermion::AnimationManager *>(tAnimationManager);

View File

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

View File

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