반응형
10년 넘게 프로그램을 하면서 Microsoft 의 MFC를 쓰면서 툴을 만들며 매번 느끼는 건 참 번잡하다라는 것이다.

또한 무겁다는 생각과 매번 만들면서 귀차니즘 같은 것들을 해야 하는... 회의감을 느끼면 개발을 했었다. 

물론 단순한 작업물을 만들때는 그냥 Class Wizard나 Project Wizard를 통해 기본으로 나오는 포멧으로 컴파일을 돌려 만들어도 된다. 

하지만 이것 저것 UI관련 작업을 하다보면 상속에 상속, 그리고 다양한 컨트롤들에 대한 디자인에 대한 스트래스... 등등의 한계와 촉박한 시간에 대한 스트래스가 늘 있었다.

뭐 툴을 개발하려면 늘 겪는 일이지만... 그래서 늘 wxWidgets나 QT라는 것을 써보고 싶었는데, 일년 전부터 애플의 맥으로도 프로그래밍을 하다 보니 툴개발에 있어 UI에 대한 범용성을 고려해 보게 되었다. 
 그러다 최근 wxWidgets 라는 것을 끄적이고 있는데, 이번에 간단하게 Direct3D를 연동하는 방법을 정리해 보련다. 

내가 아는 범위에서는 5가지로 정리가 되었다. 여기서 1,2 번은 동일하다고 봐도 된다. 

1. wxControl를 상속 받아 Direct3D Device를 초기화 하고 Rendering 하는 방법이 있다.
2. wxPanel를 상속 받아 Direct3D Device를 초기화 하고 Rendering 하는 방법이 있다. 
3. wxEventLoop 를 상속받아 이벤트 객체를 만들고 wxApp를 상속 받아 만든 객체에서 OnRun()에서 메세지 처리와 렌더링 함수를 호출하는 아마 MFC에서 비슷하게 했을 법한 방법으로 구현한다. 
4. 스레드를 이용한 렌더링 함수 호출 방법
5. wxFrame나 wxWindow등을 상속 받아 Timer 호출을 통한 강제 렌더링 방법

위의 방법 모두 잘 되었다. 문제는 스레드의 경우 예외 처리시 조금 고려해야 할 것이 발생할듯 싶고, 툴이라는 것을 고려하면 이벤트 호출에 대한 처리도 원활하게 되어야 하지 않을까 싶다. 
다시 말해 메세지의 흐름에 대해서 억지스럽지 않게 처리해야 한다고 본다면 1~3번 방법이 가장 효과적이라 생각이 드는데, 일정 프래임을 요구한다면 타이머나 스레드 방법을 이용한 방법이 확실하다 하겠다. 

뭐 어떤 방법이든, 기본 방법은 MFC나 wxWidgets나 다르지 않다고 본다. 다만 복잡도의 경우 wxWidgets가 좀더 단순하고 명확해 보여서 깔끔해(직관적) 보인다. 


앞서 명시한 방법중에 1, 2 의 차이는 메세지 구조다. wxWidgets의 컨트롤 마다 메세지 구조가 조금씩 다른데, 
제한된 메세지 구조와 조금 폭넓은 메세지 구조로 염두해도 되겠다. (? 사실 조금 더 디테일하게 공부를 해야 하는데
어설픈 깊이의 내용이라 은근 슬쩍 넘기라... )


우선 귀차니즘에 AllMighty님의 코드를 이용해서 여러가지 실험을 해보았는데, 스레드 방법에 대해서는 AllMighty님의 블로그에 올려진 코드를 참고하면 될듯 싶다. 

내가 구현한 방법은 AllMighty님 코드를 참고해서 wxControl를 상속한 것과 wxPanel를 상속해서 만든 객체에 삼각형이 그려지게 구현해 본것이다. 


TestX는 wxPanel를 상속한 객체에 삼각형을 그리도록 한 소스이며, TestY는 wxControl를 상속하여 삼각형을 그리도록 한 코드이다.  또한 VisualStudio 2010에서 작업한 코드이다. 

기회가 된다면 이것을 참고해서 더 훌륭한 프래임 객체를 구성해 보는 것도 wxWidgets를 배우는 입장에서는 도전해볼만하다 하겠다. ^^;

참고자료 :  1. 렌즈군의 게임공작소
                2. AllMighty님 블로그의 Direct3D(DirectX) with wxWidget 
                3. 기타 인터넷에서 wxWidgets + Direct3D 로 검색하면 나오는 자료들..

                                                                                                                  작성자 : 이준곤(LeeChen)
                                                                                                                  작성일 : 2012. 1. 3 
반응형

+ Recent posts