DirectShow 보유 사용이 금지되고 있는 인터페이스 IDirectDraw3 CreateSurface [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
주 : IDirectDraw3 인터페이스의 사용은 피하는 것.
DirectDraw 개체로부터 DirectDrawSurface 개체를 생성 한다.
구문
STDMETHOD CreateSurface(
LPDDSURFACEDESC lpDDSurfaceDesc,
LPDIRECTDRAWSURFACE FAR *lplpDDSurface,
IUnknown FAR *pUnkOuter
);
파라미터
lpDDSurfaceDesc
[in] 요구하는 표면을 기술하는 DDSURFACEDESC 구조체의 포인터. 이 메서드를 호출하기 전에, 사용하지 않는 DDSURFACEDESC 멤버 모든 것을 0 으로 설정해야 한다. DDSCAPS 구조체는 DDSURFACEDESC 의 멤버이다.
lplpDDSurface
[out] 유효한 DirectDrawSurface 포인터로 초기화하는 포인터의 주소 (호출이 성공했을 경우).
pUnkOuter
[in] 안쪽의 개체의 IUnknown 인터페이스와 집성 되는 외부의 개체의 IUnknown 인터페이스의 포인터.
반환값
성공했을 경우는, DD_OK 를 돌려준다. 그 이외의 경우는, 다음의 몇개의 에러값을 돌려준다.
값 | 설명 |
DDERR_INCOMPATIBLEPRIMARY | 1차 표면의 생성 요구가 기존의 1차 표면와 일치하고 있지 않다. |
DDERR_INVALIDCAPS | 콜백 함수에 건네진 1 개 이상의 능력 비트가 부정하다. |
DDERR_INVALIDOBJECT | DirectDraw 가 무효인 DirectDraw 개체의 포인터를 받았다. |
DDERR_INVALIDPARAMS | 메서드에 건네진 1 개 이상의 인수가 부정하다. |
DDERR_INVALIDPIXELFORMAT | 지정된 픽셀 포맷이 무효이다. |
DDERR_NOALPHAHW | 알파 가속화 하드웨어가 존재하지 않는지, 이용할 수 없기 때문에, 요구된 처리가 실패했다. |
DDERR_NOCOOPERATIVELEVELSET | 표면의 생성전에 IDirectDraw2::SetCooperativeLevel 메서드가 불려 가지 않았다. |
DDERR_NODIRECTDRAWHW | 하드웨어 전용 DirectDraw 개체를 생성 할 수 없다. 드라이버는 하드웨어를 지원 하지 않는다. |
DDERR_NOEMULATION | 소프트웨어 에뮬레이션을 이용할 수 없다. |
DDERR_NOEXCLUSIVEMODE | 애플리케이션에 대해서 배타 모드가 요구되었지만, 애플리케이션에 배타 모드가 없다. |
DDERR_NOFLIPHW | 표시되는 표면을 플립핑 할 수 없다. |
DDERR_NOMIPMAPHW | 밉맵 텍스처를 맵핑 하는 하드웨어가 존재하지 않는지, 이용할 수 없기 때문에, 처리를 실행할 수 없다. |
DDERR_NOOVERLAYHW | 오버레이 하드웨어가 존재하지 않는지, 이용할 수 없기 때문에, 처리를 실행할 수 없다. |
DDERR_NOZBUFFERHW | z 버퍼에 대한 하드웨어 지원이 없기 때문에, 디스플레이 메모리에서의 z 버퍼의 생성, 또는 z 버퍼를 사용한 블리트를 실행할 수 없다. |
DDERR_OUTOFMEMORY | DirectDraw 를 이용할 수 있는 메모리가 부족하기 때문에, 처리를 실행할 수 없다. |
DDERR_OUTOFVIDEOMEMORY | DirectDraw 를 이용할 수 있는 디스플레이 메모리가 부족하기 때문에, 처리를 실행할 수 없다. |
DDERR_PRIMARYSURFACEALREADYEXISTS | 애플리케이션은 이미 1차 표면을 생성 하고 있다. |
DDERR_UNSUPPORTEDMODE | 디스플레이는 현재 지원되지 않은 모드이다. |
DDERR_UNSUPPORTED | 처리가 지원하지 않는다. |
주의
pUnkOuter 인수에 NULL 를 건네주면lplpDDSurface 인수에 DirectDraw 표면의 주소가 반환된다. 또, 안쪽의 인터페이스와 집성 하는 외부의 인터페이스의 포인터를 건네주면lplpDDSurface 인수에 대응하는 IUnknown 포인터가 반환된다.
현재의 DirectDrawEx 는,DDSCAPS 구조체의 dwcaps 멤버에 대응하는 DDSCAPS_DATAEXCHANGE 플래그도 제공한다. 이 플래그는, Ddrawex.h 에 DDSCAPS_SYSTEMMEMORY 와 DDSCAPS_VIDEOMEMORY 의 편성으로서 정의되고 있다. DDSCAPS_DATAEXCHANGE 플래그를 사용해 표면을 생성 했을 경우, 충분한 비디오 메모리를 이용할 수 없으면 표면이 자동적으로 비디오 메모리에 옮겨진다. 그 이외의 경우에는, 시스템 메모리 표면이 생성 된다. 또, 이 플래그를 DDSCAPS_OWNDC 플래그와 함께 설정 하면, 애플리케이션으로부터 IDirectDrawSurface::GetDC 메서드를 호출하는 것으로, 표면의 잠금을 보관 유지하지 않고 , 장치 문맥을 불필요하게 될 때까지 잠글 수 있다.
이 메서드는,IDirectDraw::CreateSurface 메서드와 IDirectDraw2::CreateSurface 메서드를 호출한다.
참조