directx tutorial 코드 보다가 질문이 생겨 문의 드립니다.

프로그래밍 일반에 관한 포럼입니다.

운영자: 류광

Locked
비회원

directx tutorial 코드 보다가 질문이 생겨 문의 드립니다.

전체글 글쓴이: 비회원 » 2009-11-22 22:37

DXUT 관련 파일들을 보다보니 아래와 같은 형태와 비슷하게 선언된 코드들이 다수 존재하더군요.

typedef bool (CALLBACK *LPDXUTCALLBACKISD3D10DEVICEACCEPTABLE)( UINT Adapter, UINT Output, D3D10_DRIVER_TYPE DeviceType, DXGI_FORMAT BackBufferFormat, bool bWindowed, void* pUserContext );

그리고 위의 코드에서 선언된 함수포인터는 아래의 코드에 나온 IsD3D10DeviceAcceptable의 함수 포인터 타입으로 활용되어 DXUTSetCallbackD3D10DeviceAcceptable 함수에 전달 됩니다.

DXUTSetCallbackD3D10DeviceAcceptable( IsD3D10DeviceAcceptable );

그리고 아래는 IsD3D10DeviceAcceptable의 정의 입니다.

bool CALLBACK IsD3D10DeviceAcceptable( UINT Adapter, UINT Output, D3D10_DRIVER_TYPE DeviceType,
DXGI_FORMAT BufferFormat, bool bWindowed, void* pUserContext )
{
return true;
}

여기서 제가 궁금한건, IsD3D10DeviceAcceptable 콜백함수의 경우 위의 함수포인터에서 보여주듯이, 다양한 인자를 받아들이는데, 어디서 IsD3D10DeviceAcceptable 함수에 인자를 넘겨주는지 입니다. 튜토리얼의 코드를 보면 wWinMain에서 거의 가장먼저 등장하는게 위의 코드인데, 잘 이해가 안가서요.
적어도 이제까지 제 경험으로는 아무리 함수포인터를 위와 같이 사용해준다고 해도 결국엔 어느시점에 가선 전달인자를 넘겨줘야하는 걸로 아는데, 그런 부분을 아무리찾아도 저는 못찾겠네요. 그렇다고 IsD3D10DeviceAcceptable 함수의 전달인자 전부에 디폴트값이 설정되어 있는 것도 아닌것 같고요..
확실치는 않지만 콜백을 위와 같이 활용하는데 있어서 제가 잘 모르는 부분이 있는 것 같은데, 혹시 이 코드에 대해 설명 좀 부탁드릴 수 있을까요?
참고로 말씀드리면 위의 코드는 DirectX SDK의 Samples 폴더 아래에 있는 C++->Direct3D10->Tutorials->Tutorial08 프로젝트의 코드입니다. 위에서도 말씀드렸지만 wWinMain의 거의 제일 처음에 실행되는 코드중 하나입니다.
죄송하지만 답변 부탁드려요.^^;

Locked