#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "scene/AnimationManager.hpp" #include "components/OverlayComponentManager.hpp" namespace thermion { class RenderTicker { using ViewAttachment = std::pair>; public: RenderTicker( filament::Engine *engine, filament::Renderer *renderer) : mEngine(engine), mRenderer(renderer) { } ~RenderTicker(); /// @brief /// @param frameTimeInNanos bool render( uint64_t frameTimeInNanos ); /// @brief /// @param swapChain /// @param view /// @param numViews void setRenderable(filament::SwapChain *swapChain, filament::View **view, uint8_t numViews); /// @brief /// @param swapChain /// @param view /// @param numViews void removeSwapChain(filament::SwapChain *swapChain); /// @brief /// @param animationManager void addAnimationManager(AnimationManager* animationManager); /// @brief /// @param animationManager void removeAnimationManager(AnimationManager* animationManager); /// @brief /// @param overlayComponentManager void addOverlayManager(OverlayComponentManager *overlayComponentManager) { mOverlayComponentManager = overlayComponentManager; } private: std::mutex mMutex; filament::Engine *mEngine = std::nullptr_t(); filament::Renderer *mRenderer = std::nullptr_t(); std::vector mAnimationManagers; OverlayComponentManager *mOverlayComponentManager = std::nullptr_t(); std::vector mRenderable; std::chrono::high_resolution_clock::time_point mLastRender; }; }