개인 프로젝트에 사용할 GUI 라이브러리를 찾고 있었다.
http://gamedev.stackexchange.com/questions/3617/good-gui-for-opengl
http://gamedev.stackexchange.com/questions/8749/gui-for-directx
위의 링크들을 보고 우선 아래의 4개 라이브러리들을 다운 받았다.
- CEGUI : http://www.cegui.org.uk/wiki/index.php/Main_Page
- GWEN : http://code.google.com/p/gwen/
- AntTweakBar : http://www.antisphere.com/Wiki/tools:anttweakbar
- MyGUI : http://mygui.info/
이 중 MyGUI는 Ogre 엔진 플랫폼 기반이라 패스하고, CEGUI는 데모를 돌려보니 무거운것 같아서 (이런 언급도 있다.) 홈페이지에 무려 "A GUI system aimed at games."라고 설명이 되어있는 GWEN을 Integration 해보기로 했다.
VS2010+DX9를 위한 설치 및 Integration 순서는 다음과 같다.
- 코드를 다운 받고 압축을 푼다. (http://code.google.com/p/gwen/downloads/list)
- Projects\ 폴더의 BuildProjects.bat를 실행하면 windows/vs2010 폴더가 생긴다.
- GWEN.sln을 열고 컴파일한다.
- "GWEN_STATIC"(혹은 GWEN_DLL)과 "Renderer-DirectX9" 2개의 프로젝트만 빌드하면 된다.
- "Renderer-DirectX9"의 프로젝트 설정을 열어서 Include/Library 경로에 현재 자신의 DX SDK 경로로 설정해준다.
- "GWEN_STATIC"의 경우 debug와 release의 output 파일 이름이 똑같은데 나는 debug일 경우 "GWEND-Renderer-DirectX9.lib" 파일이 빌드되도록 수정하였다.
- 자신의 프로그램에서 GWEN\include 폴더와 GWEN\lib\windows 폴더를 각각 참조하도록 수정한다.
#ifdef _DEBUG
#pragma comment(lib, "GWEND-Renderer-DirectX9.lib") // 아까 설정한 debug 전용 Lib
#else
#pragma comment(lib, "GWEN-Renderer-DirectX9.lib")
#endif
#pragma warning(disable : 4100) // warning 제거
#include < Gwen/Renderers/DirectX9.h>
#include < Gwen/Controls/Canvas.h>
#include < Gwen/Skin.h>
#include < Gwen/Skins/Simple.h>
#include < Gwen/Skins/TexturedBase.h>
#pragma warning(default : 4100)
그리고 RenderCanvas 함수는 (자신이 만든 렌더링 코드) DX Device의 BeginScene과 EndScene 사이에 넣어준다.
이렇게 까지 하고 원하는 컨트롤(버튼, 텍스트 등)을 넣었다면 제대로 화면 출력이 "시도"될텐데... 나 같은 경우는 갑자기 메쉬가 알파블랜딩이 되고, 일부 Primitive가 렌더링 되지 않았다. 이유를 찾아보니... GWEN의 Rendering 시작 부분에서 DX State를 바꿔놓는데 이를 복구하는 코드가 없었다.
뭐 라이브러리를 고치면 되는 일이기는한데 도움말도 너무 빈약하고 첫 단계부터 마음에 들지 않는 버그들을 발견하니 더 이상 이걸 쓰고 싶은 마음이 많이 사라졌다. -_-
장점이라면 코드가 간단하고, namespace 사용을 잘해서 편리하며 가볍다는건데... 일단 AntTweakBar를 한번 통합해보기로 했다.
'Game Dev > Work Log' 카테고리의 다른 글
UTF-8 파일 만들기 (0) | 2014.11.05 |
---|---|
VS2013에서 .props 파일을 이용해서 프로젝트 관리하기 (0) | 2014.08.22 |
Horizon Occlusion (0) | 2011.07.06 |
OpenProcess using Native API (0) | 2011.07.06 |