#pragma once #include #include #include #include // for std::pair #include #include #include #include #include #include #include #include #include #include #include #include #include #include "scene/AnimationManager.hpp" namespace thermion { class RenderTicker { 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 animationManager void addAnimationManager(AnimationManager* animationManager); /// @brief /// @param animationManager void removeAnimationManager(AnimationManager* animationManager); private: std::mutex mMutex; filament::Engine *mEngine = nullptr; filament::Renderer *mRenderer = nullptr; std::vector mAnimationManagers; std::vector>> mRenderable; std::chrono::high_resolution_clock::time_point mLastRender; }; }