로깅 시스템


로그 시스템은 spdlog 라이브러리를 랩핑해서 사용합니다.


spdlog 라이브러리 사용법은 https://github.com/gabime/spdlog 이곳을 참고하면 됩니다. 

setPattern은 아래와 같은 매크로를 통해 애플리케이션 레이어와 코어 레이어에서 로그 호출을 구분하기 위해 정의해두었습니다.


SPD_LOGGER_CALL은 spdlog 내부에서 호출 위험 레벨에 대해 직접 할당하던 매크로 입니다. 
저는 메세지만 입력하고 로거 호출은 자동으로 해줄 수 있도록 다시 매크로로 랩핑해서 사용했습니다.

 

이벤트 시스템

 


이벤트 시스템은 실제 헤이즐 엔진에서 사용되던 코드를 가져왔습니다. 
EVENT_CLASS_TYPE은 매크로 구문을 통해 상속된 클래스마다 함수를 재정의해주는 방식입니다.
Event 클래스는 각 플랫폼(운영체제 등)마다 발생되는 이벤트들을 추상화하기 위해 작성된 코드입니다.


사용 예로, 위는 GLFW를 통해 Windows에 Window를 생성할 때 콜백 함수 OnEvent()를 등록한 후,  Event 클래스를 이용해서 각 호출에 대한 콜백 함수를 GLFW를 통해 바인딩해주는 코드입니다.

 


OnEvent에서 콜백 함수에 대한 String을 받아와서 호출해주면 다음과 같이 잘 호출되는 것을 확인할 수 있습니다. 
이를 통해서 Event는 각 플랫폼에 대해 알지못해도 추상화를 통해 단지 호출만으로 각 플랫폼에 대응되는 이벤트를 얻을 수 있습니다.


참고로 OnEvent에서 사용된 매크로는 위에서 정의한 Log 매크로입니다. 
event를 인자로 취해도 각 정보가 포매팅되어 호출되는 이유는, Spdlog 시스템이 아래 코드와 같이 << operator에 대응되기 때문입니다.