diff --git a/src/Magnum/Timeline.cpp b/src/Magnum/Timeline.cpp index e8c674135..419573356 100644 --- a/src/Magnum/Timeline.cpp +++ b/src/Magnum/Timeline.cpp @@ -61,4 +61,19 @@ Float Timeline::previousFrameTime() const { return duration_cast(_previousFrameTime-_startTime).count()/1e6f; } +Float Timeline::currentFrameDuration() const { + if (!running) return 0; + + auto now = high_resolution_clock::now(); + auto duration = UnsignedInt(duration_cast(now-_previousFrameTime).count()); + return duration/1e6f; +} + +Float Timeline::currentFrameTime() const { + if (!running) return 0; + + auto now = high_resolution_clock::now(); + return duration_cast(now-_startTime).count()/1e6f; +} + } diff --git a/src/Magnum/Timeline.h b/src/Magnum/Timeline.h index 2ad16b816..64abb8b27 100644 --- a/src/Magnum/Timeline.h +++ b/src/Magnum/Timeline.h @@ -134,6 +134,22 @@ class MAGNUM_EXPORT Timeline { */ Float previousFrameDuration() const { return _previousFrameDuration; } + /** + * @brief Time since the last frame (in seconds) + * + * Returns time elapsed since nextFrame() was called. If the timeline is + * stopped, the function returns @cpp 0.0f @ce. + */ + Float currentFrameDuration() const; + + /** + * @brief Present time (in seconds) + * + * Returns time elapsed since start() was called. If the timeline is + * stopped, the function returns @cpp 0.0f @ce. + */ + Float currentFrameTime() const; + private: std::chrono::high_resolution_clock::time_point _startTime; std::chrono::high_resolution_clock::time_point _previousFrameTime;