DirectMusic DirectMusic 의 고도의 주제 커스텀 로드   [목차열람] [주소복사] [슬롯비우기]
커스텀 로드
 
Microsoft DirectX 9.0

커스텀 로드

애플리케이션이, 개체의 로드 자체를 관리해야 하는 경우도 있다. 예를 들어, 모든 개체가, 특수한 압축 컨텐츠 파일에 저장 되고 있는 경우 등이다. 애플리케이션은,IDirectMusicLoader8 인터페이스를 지원 하는 개체의 형식에서 독자적인 로더를 생성 해, 적어도 GetObject 메서드를 처리 할 수 있다. 또, 로더의 이 처리에서는,IStream 인터페이스와 IDirectMusicGetLoader8 인터페이스의 양쪽 모두를 가지는 독자적인 스트림 개체도 생성 해야 한다.

GetObject 는, 파일 또는 리소스로부터 개체를 로드하는 요구를 받아들이면 스트림을 생성 해, 개체의 IPersistStream::Load 메서드에 IStream 의 포인터를 건네준다. 또, 커스텀 파일로부터의 읽기를 관리하기 위해서 애플리케이션이 생성 한 기존의 스트림으로부터 개체를 로드하는 요구를 받아들이면 같은 시크 포인터로 IStream 의 복사를 생성 해, 이 복사를 Load 에 건네준다.

로드 가능한 개체는, 스트림 개체의 IDirectMusicGetLoader8::GetLoader 의 처리을 사용해,IStream 를 생성 한 로더에 대한 포인터를 얻어온다. 개체는, 다른 개체에 대한 참조를 검색할 때에,GetObject 를 재귀적으로 호출하기 위해서(때문에) 이 포인터가 필요하다. 예를 들어, 세그먼트(segment) 개체는, WAV 파일에 대한 참조를 포함한 경우가 있다. WAV 파일은, 세그먼트(segment)와 함께 로드할 필요가 있다.

컨테이너 개체를 지원 하기 위해서는, 로더는 IDirectMusicLoader8::SetObject 메서드도 처리 할 필요가 있다. 이 처리은, 제공되는 DMUS_OBJECTDESC 구조체의 모든 정보를 보관 유지해, 필요에 따라서 스트림 포인터를 복사 한다. 그 후, 개체를 생성 해,IDirectMusicObject8::ParseDescriptor 를 호출해, 개체의 기술 정보의 나머지를 얻어온다. 다만, 로더는,GetObject 가 불려 갈 때까지는, 개체를 실제로 로드해서는 안 된다. 파묻힌 개체의 컨테이너만을 취급할 필요가 있는 경우는, DMUS_OBJ_STREAM 가 설정되어 있을 때 만 처리 할 필요가 있다.

더 자세한 정보는, msdn.microsoft.com 의 「Custom Loading in DirectMusic 」를 참조할것.

↑TOP