-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCTimeMgr.cpp
82 lines (67 loc) · 1.82 KB
/
CTimeMgr.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include "pch.h"
#include "CTimeMgr.h"
#include "CCore.h"
CTimeMgr::CTimeMgr()
: m_liFreqency{}
, m_liPrevCount{}
, m_liCurCount{}
, m_iFPS(0)
, m_fDS(0.f)
, m_fAddTime(0)
, m_fCurTime(0)
{
}
CTimeMgr::~CTimeMgr()
{
}
void CTimeMgr::Init()
{
/// <summary>
/// QueryPerformanceCounter (_Out_ LARGE_INTEGER* lpPerformanceCount)
/// - 8바이트 정수(longlong)를 돌려 받음
/// - 초당 카운트하는 수를 반환 (대략 초당 천만)
/// </summary>
QueryPerformanceFrequency(&m_liFreqency);
/// <summary>
/// QueryPerformanceCounter(_Out_ LARGE_INTEGER* lpPerformanceCount)
/// - 8바이트 정수(longlong)를 돌려받음
/// - 현재까지 카운트를 한 수
/// - Delta Second : 현재까지 카운트를 한 수 / 초당 카운트를 한 수
/// </summary>
QueryPerformanceCounter(&m_liPrevCount);
}
void CTimeMgr::Update()
{
// ===============================
// DS 구하기
// ===============================
// 현재 카운팅 확인
QueryPerformanceCounter(&m_liCurCount);
// 이전 카운팅과 현재 카운팅의 차이를 초당 카운팅으로 나누어 1프레임이 실행되는데 걸린 시간(Delta Second)을 구한다
m_fDS = (float)(m_liCurCount.QuadPart - m_liPrevCount.QuadPart) / (float)m_liFreqency.QuadPart;
#ifdef _DEBUG
// 디버그 모드 한정 강제 60FPS 확보
if (m_fDS > (1.f / 60.f))
{
m_fDS = 1.f / 60.f;
}
#endif
// 현재 카운팅 값을 저장해둔다 ( 다음번 DS체크에 활용하기 위해서)
m_liPrevCount.QuadPart = m_liCurCount.QuadPart;
// 시간 누적 ( 경과 시간은 프레임 실행 시간의 누적이다 )
m_fAddTime += m_fDS;
m_fCurTime += m_fDS;
// ===============================
// FPS 구하기
// ===============================
m_iFPS++;
// 누적 시간이 1초를 넘는 순간
if (m_fAddTime >= 1.f)
{
m_fAddTime = m_fAddTime - 1.f;
wchar_t szStr[255] = L"";
wsprintf(szStr, L"My HellTaker FPS: %d", m_iFPS);
SetWindowTextW(CCore::GetInst()->GetMainWndHWND(), szStr);
m_iFPS = 0;
}
}