현재 최신 다이렉트X 버젼이라고 할 수 있는 Direct 9.0c 의 SDK가 제공 해 주는 sample 예제이다. 3D rendering을 위해 기본적으로 필요한 함수들(함수 체계에 대해서는 훗날 별도의 글을 통홰 설명하도록 한다.) 및 편리하게 사용할 수 있는 유틸리티를 라이브러리로 제공해 주기 때문에 본인이 애용하는 샘플이다.
물론 향후 DirectX의 새버젼이 나오면 호환이 되지 않아 새로운 Sample 예제를 찾아 봐야 될지도 모르겠지만 현재 제공하는 예제 중에는 제일 사용하기 무난한 샘플이 아닌가 하는 생각을 해 본다. 비록 새버젼의 DirectX가 나오더라도 기본적인 틀은 이와 비슷할 것이기에 이 샘플을 통해 DirectX 및 지금 연구하고자 하는 렌더링 구현을 위한 프로그래밍 언어를 이해하는 데에도 큰 도움이 될 것으로 보인다.
올해 본인이 처음으로 만든 3D 엔진 역시 이 샘플을 기반으로 두고 있지만 무언가 이상한 코딩들을 많이 벌려 놓아서 새롭게 시작한다.
여기서는 기존 Simplesample(이하 샘플)의 핵심 함수를 보도록 한다.
이 샘플은 기본적으로 API 방식(전적으로 본인이 정의한 것에 따라 -_-)의 코드이다.
기본 소스 파일에 정의되어 있는 함수는 모두 Callback 함수들로 이벤트에 따라 자동으로 불려지게 코딩되어 있다.
WinMain
/* API의 가장 상위 함수. 말 그대로 main 함수고 프로그램은 여기서부터 시작된다. 아래의 함수들을 callback 등록하고 있으며 매 프레임당 작업 수행을 위한 DXUTMainLoop()을 호출한다. */
InitApp
/* 별건 없고 프로그램 시행 후 딱 한 번 시행되는 초기화 함수이다. 여기에는 프로그램 전체에서 항상 동작될 Class initialize 등의 작업을 하면 편할 것이다. */
IsDeviceAcceptable
/* device initialize 시 불리게 한다고 하는데;; Caps 확인을 통해 현재의 하드웨어가 현 프로그램에서 사용할 기능을 지원하는가 여부를 판단하게 할 수 있을 것이다. */
ModifyDeviceSettings
/* 디바이스 세팅을 수정할 때 불리는 callcack 함수라고 그 이름이 말해 주고 있다. -_-; 보아하니... OnResetDevice 처럼 Direct3D device가 바뀔 때마다 불리는데; 순서는 OnResetDevice 앞이다. 뭔가 그것 이전에 사전에 해야 할 작업을 이 함수에서 처리하는 것 같다. */
OnCreateDevice
/* 앞서 디바이스 테스트 후 Direct3D device인 [IDirect3DDevice9]가 최초로 만들어지고 나서 불리게 callback 함수로 Direct3D device후 요구될 기타 잡 디바이스 생성 및 디바이스 생성 후 유효할 최초 한번의 셋팅을 처리한다. */
OnResetDevice
/* 좀 신경 써서 봐야할 함수로 Direct3D device가 reset 될 때 (ex. 윈도우 창 사이즈가 바뀌거나 기타 백버퍼의 타입을 바꾸거나...) 호출되는 기본 callback 함수이다. */
OnFrameMove
OnFrameRender
/* 기본적으로 매 프레임 당 호출 되어 rendering 작업을 하게 될 핵심 callback 함수이다. 순서는 Move -> Render 로 불린다. 알아서 센스있게 사용! */
MsgProc
KeyboardProc
/* input 메세지를 받아 처리하는 함수이다. calling 방식으로 처리되는지 interrupt 방식으로 처리되는지는 확실하지 않지만 브레이크 포인터 걸어 둘 시 매번 여기서 걸리는 것으로 보아 calling 방식으로 처리되는 것으로 보이며 OnFrame call back 함수 앞에서 걸리는 함수로 보인다. */
OnGUIEvent
/* SimpleSample이 있는 DX9.0c sample 군에서 제공하는 GUI 이벤트를 처리하는 함수이다. 역시 calling 방식으로 매 프레임으로 처리되는 것으로 보인다. */
OnLostDevice
OnDestroyDevice
/* 프로그램을 닫을 때 현재 열려 있는 디바이스를 모두 해제시키는 call back 함수이다. */
위에서 소개한 함수에서 가장 기본이 되는 것은 프로그램 시작 시 Device를 생성하는 함수와 매 프레임 당 렌더링 및 I/O 메세지를 처리할 함수 그리고 프로그램 종료 시 현재 활성화된 Device 및 할당 메모리 영역을 해재시켜 주는 함수이다. SimpleSample은 이러한 기본적 함수에 보다 편리하게(?) 사용될 가능성이 있는 함수들을 추가한 것이다.
그 외의 함수 내부 코드들 및 코드의 사용에 관한 문제는 전적으로 유저 프로그래머의 몫이므로 SimpleSample의 소개는 여기서 마치기로 한다.
-
편리한 SimpleSample in DirectX 9.0c정리필요2 2008. 7. 2. 19:13