From 6904ce72df5446844c03c8b79738f7692fe28cf5 Mon Sep 17 00:00:00 2001 From: OldSerpskiStalker Date: Wed, 4 Sep 2024 15:04:01 +0500 Subject: [PATCH] Added Timer and FPSCounter --- src/RenderLibrary/FPSCounter.cpp | 27 +++++++++++++++++++ src/RenderLibrary/FPSCounter.hpp | 19 +++++++++++++ src/RenderLibrary/RenderLibrary.vcxproj | 4 +++ .../RenderLibrary.vcxproj.filters | 4 +++ src/RenderLibrary/Timer.cpp | 24 +++++++++++++++++ src/RenderLibrary/Timer.hpp | 18 +++++++++++++ 6 files changed, 96 insertions(+) create mode 100644 src/RenderLibrary/FPSCounter.cpp create mode 100644 src/RenderLibrary/FPSCounter.hpp create mode 100644 src/RenderLibrary/Timer.cpp create mode 100644 src/RenderLibrary/Timer.hpp diff --git a/src/RenderLibrary/FPSCounter.cpp b/src/RenderLibrary/FPSCounter.cpp new file mode 100644 index 0000000..513e7a2 --- /dev/null +++ b/src/RenderLibrary/FPSCounter.cpp @@ -0,0 +1,27 @@ +#include "StdAfx.h" + +#include +#include +#include "FPSCounter.hpp" + +using namespace RenderLibary; + +FPSCounter::FPSCounter() : _frame_count(0), _fps(0) +{ + _last_time = std::chrono::high_resolution_clock::now(); +} + +void FPSCounter::update() +{ + _frame_count++; + auto now = std::chrono::high_resolution_clock::now(); + std::chrono::duration elapsed = now - _last_time; + + if (elapsed.count() >= 1.0) + { + _fps = _frame_count / elapsed.count(); + _frame_count = 0; + _last_time = now; + std::cout << "FPS: " << _fps << std::endl; + } +} diff --git a/src/RenderLibrary/FPSCounter.hpp b/src/RenderLibrary/FPSCounter.hpp new file mode 100644 index 0000000..d6526c9 --- /dev/null +++ b/src/RenderLibrary/FPSCounter.hpp @@ -0,0 +1,19 @@ +#pragma once + +namespace RenderLibary +{ + class FPSCounter final + { + public: + FPSCounter(); + ~FPSCounter() = default; + + void update(); + + private: + double _fps; + int _frame_count; + + std::chrono::high_resolution_clock::time_point _last_time; + }; +} diff --git a/src/RenderLibrary/RenderLibrary.vcxproj b/src/RenderLibrary/RenderLibrary.vcxproj index 02bfe9f..b67f1b3 100644 --- a/src/RenderLibrary/RenderLibrary.vcxproj +++ b/src/RenderLibrary/RenderLibrary.vcxproj @@ -170,6 +170,7 @@ + Create @@ -177,14 +178,17 @@ Create Create + + + diff --git a/src/RenderLibrary/RenderLibrary.vcxproj.filters b/src/RenderLibrary/RenderLibrary.vcxproj.filters index f4d146f..4397411 100644 --- a/src/RenderLibrary/RenderLibrary.vcxproj.filters +++ b/src/RenderLibrary/RenderLibrary.vcxproj.filters @@ -15,6 +15,8 @@ + + @@ -23,5 +25,7 @@ + + \ No newline at end of file diff --git a/src/RenderLibrary/Timer.cpp b/src/RenderLibrary/Timer.cpp new file mode 100644 index 0000000..629d10c --- /dev/null +++ b/src/RenderLibrary/Timer.cpp @@ -0,0 +1,24 @@ +#include "StdAfx.h" + +#include +#include "Timer.hpp" + +using namespace RenderLibary; + +Timer::Timer() : _start_time(std::chrono::high_resolution_clock::now()) +{ + +} + +void Timer::reset() +{ + _start_time = std::chrono::high_resolution_clock::now(); +} + +double Timer::elapsed() const +{ + auto end_time = std::chrono::high_resolution_clock::now(); + std::chrono::duration diff = end_time - _start_time; + + return diff.count(); +} diff --git a/src/RenderLibrary/Timer.hpp b/src/RenderLibrary/Timer.hpp new file mode 100644 index 0000000..739d085 --- /dev/null +++ b/src/RenderLibrary/Timer.hpp @@ -0,0 +1,18 @@ +#pragma once + +namespace RenderLibary +{ + class Timer final + { + public: + Timer(); + ~Timer() = default; + + void reset(); + double elapsed() const; + + private: + std::chrono::high_resolution_clock::time_point _start_time; + }; +} +