로깅 시스템
로그 시스템은 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에 대응되기 때문입니다.
'프로젝트 > Normal Engine' 카테고리의 다른 글
[#6] docking 시스템 추가, LevelContainer 수정, Log 편의 기능 (0) | 2023.07.31 |
---|---|
[#5] Imgui example renderer 연동 테스트 (0) | 2023.07.27 |
[#4] Keyboard, Mouse InputManager, LevelContainer (0) | 2023.07.25 |
[#2] 게임 엔진 베이스 코드 (0) | 2023.07.12 |
[#1] 게임 엔진 만들기 프로젝트 시작 (0) | 2023.07.11 |