소스를 정리하는 의미로 이쯤에서 간단한 프레임웍을 만들어보기로 하겠습니다.
이 프레임웍은 Windows Forms의 컨트롤에 연동시키거나 (Form1.h) Stand Alone으로 동작하는 프로그램 (main.cpp)의 작성을 쉽게 하기 위한 것입니다.
프레임웍의 구성은 기본적인 사항을 관리하는 Goblin.h, Framerate를 관리하는 GoblinTicker.h, 그리고 추후 이벤트를 통한 확장을 위한 GoblinDelegate.h의 파일 3개로 이루어져있습니다.
실제 사용시에는 이 프레임웍의 Goblin 클래스를 상속해서 기능을 추가로 구현하면 됩니다.
생성자는 2종류가 있으며 Wondows Forms에서 사용할 경우 Panel을 하나 올려놓고 생성자의 인수로 핸들을 넘겨주면 됩니다.
초기화와 렌더링은 Init()와 Render() 메소드를 오버라이드해서 사용합니다.
SlimDX_Framework_Console.zip
SlimDX_Framework_WindowsForms.zip
2 개의 댓글:
정말 잘 보고 있습니다. 감사합니다.
궁금한게 생겨서 덧글을 남깁니다. (보실지 모르겠지만..)
만드신 GoblinFramwork는 한개의 Form당
한개의 DX View만을 가질 수 있도록 설계되있다고
생각되는데요~
한개의 Form에 2개 이상의 DX View를 가지려면 어떻게 해야될까 궁금해졌습니다.
그래서 소스를 분석하다보니 Render 부분이 중요하고,
Loop 내의 Render와 윈도우Event 처리 관계를 봤습니다.
여기서, 무한루프를 통해 Render와 DoEvents() 를 하더라구요.. 이 방식을 어떻게든 변경을 해야 가능할거라 생각이 듭니다. 움.. 근데 DoEvents는 어떻게 해야할지 잘 모르겠네요..
뷰 하나당 프레임웍을 상속받은 클래스 하나를 할당하고
한 개의 폼에 2개 이상의 뷰를 가지는 경우
각각 클래스를 사용하며 초기화등의 공통부분은
프레임워크에서 처리해주도록 설계했었는데요
실제로 4개의 뷰에 각기 다른 내용이 동작하도록 작성했을 경우
2번째 뷰에서부터 이미 디바이스가 생성되었으므로 이 디바이스를 사용하여 스왑체인과 백버퍼, 그리고 뷰포트에 대해 각각 처리하면 됩니다.
Render와 DoEvents는 어차피 각기 쓰레드로 동작하고 뷰마다 프레임웍을 상속하여 다른 쓰레드이므로
무한루프와는 상관없이 메세지 핸들링이 가능합니다.
다만 문제는 각 뷰마다 프레임 유지를 위한 로드밸런싱이나
디바이스가 소실되었을 경우 뷰마다 쓰레드가 다르기 때문에
동기화를 시켜줘야하는등 점점 복잡해져서
프레임워크 기능에서 제거하고 간단화했었습니다.
댓글 쓰기