Graphics Programming
Dear ImGui 본문
DX12 토이 프로젝트인 Cyseal에 Dear ImGui를 붙여봤다.
Dear ImGui는 렌더링 테크데모, 게임 엔진 등의 분야에서 많이 쓰이는 imgui 라이브러리다. 이전 회사에서 같이 일했던 선임 엔지니어 분이 간단한 엔진 툴을 만들 때 써봤는데 매우 직관적이고 사용하기 편리하다고 추천하셨던 기억이 난다.
나도 Dear ImGui에 편승하기로 했다. 듣던 대로 통합하기도 쉽고 사용법도 간단했다. 내 프로젝트에서 Vulkan 백엔드가 제대로 돌지 않고 있기 때문에 일단은 imgui의 win32 + dx12 백엔드 부분만 통합했다.
처음에 그려보니 글자가 살짝 흐릿하고 마우스 히트 테스트가 어긋나는 문제가 있었는데, 내가 swapchain 이미지들의 크기를 윈도우 client rect와 정확히 일치시키지 않아서였다. win32 윈도우를 생성할 때 지정하는 크기는 윈도우 전체의 크기고 타이틀 바, 테두리 등을 뺀 client rect는 좀 더 작다. Cyseal은 윈도우 리사이즈 이벤트를 받아서 스왑체인 이미지를 재생성하는데, 이때는 client rect를 제대로 반영하므로 리사이즈 후에는 이 문제들이 해결된다. 윈도우 크기를 조절해보고 이 문제인 것을 깨달았다. 내 OpenGL 프로젝트에도 똑같은 문제가 발생할 것 같은데 여기서는 제대로 처리를 해놨는지 나중에 살펴봐야겠다.
이제 특정 렌더 패스만 토글한다던가 하는 옵션을 GUI로 컨트롤할 수 있게 되었다. 통합 난이도를 보아하니 OpenGL 프로젝트에도 Dear ImGui를 그냥 붙이면 잘 동작할 거 같지만, GUI 직접 코딩해놓은 것 버리기 싫어서 아마 Dear ImGui는 안 붙일 듯...