Files
cup_edit/thermion_dart/native/src/c_api/TRenderTicker.cpp
2025-07-01 10:21:39 +08:00

71 lines
2.8 KiB
C++

#ifdef _WIN32
#include "ThermionWin32.h"
#endif
#ifdef __EMSCRIPTEN__
#include <emscripten.h>
#endif
#include <thread>
#include <functional>
#include <filament/LightManager.h>
#include "Log.hpp"
#include "RenderTicker.hpp"
using namespace thermion;
extern "C"
{
#include "c_api/TRenderTicker.h"
EMSCRIPTEN_KEEPALIVE TRenderTicker *RenderTicker_create(TEngine *tEngine, TRenderer *tRenderer) {
auto engine = reinterpret_cast<filament::Engine *>(tEngine);
auto *renderer = reinterpret_cast<filament::Renderer *>(tRenderer);
auto *renderTicker = new RenderTicker(engine, renderer);
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);
renderTicker->addAnimationManager(animationManager);
}
EMSCRIPTEN_KEEPALIVE void RenderTicker_removeAnimationManager(TRenderTicker *tRenderTicker, TAnimationManager *tAnimationManager) {
auto *renderTicker = reinterpret_cast<RenderTicker *>(tRenderTicker);
auto *animationManager = reinterpret_cast<thermion::AnimationManager *>(tAnimationManager);
renderTicker->removeAnimationManager(animationManager);
}
EMSCRIPTEN_KEEPALIVE void RenderTicker_render(TRenderTicker *tRenderTicker, uint64_t frameTimeInNanos) {
auto *renderTicker = reinterpret_cast<RenderTicker *>(tRenderTicker);
renderTicker->render(frameTimeInNanos);
}
EMSCRIPTEN_KEEPALIVE void RenderTicker_setRenderable(TRenderTicker *tRenderTicker, TSwapChain *tSwapChain, TView **tViews, uint8_t numViews) {
auto *renderTicker = reinterpret_cast<RenderTicker *>(tRenderTicker);
auto *swapChain = reinterpret_cast<filament::SwapChain *>(tSwapChain);
auto *views = reinterpret_cast<View **>(tViews);
renderTicker->setRenderable(swapChain, views, numViews);
}
EMSCRIPTEN_KEEPALIVE void RenderTicker_setOverlayManager(TRenderTicker *tRenderTicker, TOverlayManager *tOverlayManager) {
auto *renderTicker = reinterpret_cast<RenderTicker *>(tRenderTicker);
auto *overlayManager = reinterpret_cast<OverlayComponentManager *>(tOverlayManager);
renderTicker->addOverlayManager(overlayManager);
}
EMSCRIPTEN_KEEPALIVE void RenderTicker_removeSwapChain(TRenderTicker *tRenderTicker, TSwapChain *tSwapChain) {
auto *renderTicker = reinterpret_cast<RenderTicker *>(tRenderTicker);
auto *swapChain = reinterpret_cast<filament::SwapChain *>(tSwapChain);
renderTicker->removeSwapChain(swapChain);
}
}