[1]. GameInstance 클래스에서, Timer_Manager클래스의 몇몇 함수를 정의해두고, 이들을 Client프로젝트에서 가져다 쓸 수 있게 하자.

image.png

[2]. 이렇게, 기존의 싱글톤 클래스로 관리했었던 Timer_Manager등등은 이제, Engine에서의 독립적인 클래스 객체로 남아있는데, 이들을 GameInstance 클래스 하나가 싱글톤으로, 이들을 관리하기 때문에, 결국 GameInstance클래스 조차 Reference Count 관리가 필요하다.

[3]. Engin_Macro.h 에서,

image.png

void DestoryInstance가 아닌, static unsigned int 로 Reference Count를 반환하고 관리하는 식으로 변경하자.

[4]. Client에서 GameInstance 클래스를 선언하는데, 이제 이 의미는, Engine프로젝트의 라이브러리를 가져다 쓸 것이다. Engine.lib에 있는 클래스들의 정의된 함수들을 가져다 사용할 것이다 라는 뜻으로, Client의 속성 - 링커 - 입력 - 추가 종속성 란에, Engine.lib를 추가하자.

[5]. Engine에서는 Directx11의 라이브러리를 가져다 사용할 것이므로, Engine의 속성 - 링커 - 입력 - 추가 종속성 란에, d3d11.lib / dxguid.lib를 추가하도록 하자.

[6]. 설정이 완료되었으면, 배치파일을 통해, 복사 붙여넣기를 진행하자.

image.png

[7]. 이제, Client 프로젝트의 Clinet.cpp 에 GameInstance클래스를 할당하고, 가장 간단하게, 이 GameInstace클래스 내부에 있는 Timer_Manager의 함수들을 호출해서 Client 프로젝트 실행 시, 실행화면 창 좌측 위에, FPS : 60 이 나오게 끔 할 것이다.

[8].

CGameInstance* pGameInstance = CGameInstance::GetInstance();
Safe_AddRef(pGameInstance);

Client.cpp 에서 사용하는데, 결국 GameInstance클래스를 한 번 참조하는 것이기에, AddRef를 진행한다.

[9]. GameInstance클래스의 Timer_Manager의 함수 중, Add_Timer함수를 통해, 2개의 타이머를 추가하고,

image.png

[10]. MainApp 클래스에서, TimeDelta를 이용해서, FPS의 값을 계산할 것이다.

[11]. 원리 : fTimerAccumulate에, TimeDelta를 계속 누적하고, update함수에 fTimeDelta를 사용하기 위해, TIMER_60으로 다시 계산하는 식으로.