PFND3DDDI_CREATERESOURCE 콜백 함수(d3dumddi.h)
CreateResource 함수는 리소스를 만듭니다.
구문
PFND3DDDI_CREATERESOURCE Pfnd3dddiCreateresource;
HRESULT Pfnd3dddiCreateresource(
HANDLE hDevice,
D3DDDIARG_CREATERESOURCE *unnamedParam2
)
{...}
매개 변수
hDevice
리소스를 만드는 데 사용되는 디스플레이 디바이스(그래픽 컨텍스트)에 대한 핸들입니다.
unnamedParam2
pResource [in, out]
생성된 리소스를 설명하는 D3DDDIARG_CREATERESOURCE 구조체에 대한 포인터입니다.
반환 값
CreateResource는 다음 값 중 하나를 반환합니다.
반환 코드 | 설명 |
---|---|
S_OK | 리소스가 성공적으로 생성되었습니다. |
E_OUTOFMEMORY | CreateResource가 완료하는 데 필요한 메모리를 할당할 수 없습니다. |
D3DERR_NOTAVAILABLE | CreateResource 는 메모리를 할당할 수 없는 것 이외의 이유로 리소스를 만들 수 없습니다. CreateResourcecan은 꼭짓점 또는 인덱스 버퍼를 만들 때만 이 오류를 반환합니다. |
설명
CreateResource 호출에는 표면 목록이 포함될 수 있습니다. pResource 매개 변수로 지정된 D3DDDIARG_CREATERESOURCE 구조체의 SurfCount 멤버는 만들 MIP 맵 수준을 포함한 표면 수를 지정합니다. 예를 들어 256x256x9 텍스처 MIP 맵 리소스에는 SurfCount 멤버와 MIP 맵 수준 수가 모두 9로 설정된 9개의 표면 목록이 포함됩니다. 9개의 MIP 맵 수준을 포함하는 큐브 맵에는 MIP 맵 수준 수가 9로 설정되고 SurfCount 가 54로 설정되어야 합니다. 3면 스왑 체인은 SurfCount 를 3으로 설정하고 MIP 맵 수준 수를 0으로 설정해야 합니다. MIP 맵 수준의 수는 항상 SurfCount의 값보다 작거나 같습니다.
CreateResource 호출에 대한 응답으로 사용자 모드 표시 드라이버는 pfnAllocateCb 함수를 호출하여 하나 이상의 메모리 할당을 만들 수 있습니다. 사용자 모드 디스플레이 드라이버는 표면당 여러 할당, 모든 표면에 대해 하나의 할당 또는 표면당 하나의 할당을 만들어야 하는지 여부를 결정해야 합니다. 할당에 대한 자세한 내용은 비디오 메모리 관리 및 GPU 예약을 참조하세요.
리소스는 여러 디바이스(hDevice) 및 프로세스에서 공유할 수 있습니다. 런타임은 D3DDDIARG_CREATERESOURCEFlags 멤버에서 SharedResource 비트 필드 플래그를 설정하여 리소스가 공유되도록 지정합니다. 이 비트 필드 플래그가 설정된 경우 사용자 모드 표시 드라이버는 공유 리소스에 대한 다음 제한을 준수해야 합니다.
- 사용자 모드 표시 드라이버는 pfnAllocateCb 및 pfnDeallocateCb 함수를 각각 한 번만 호출할 수 있습니다.
- 사용자 모드 표시 드라이버는 리소스를 처음 만든 후 리소스에 대한 추가 할당을 만들 수 없으며, 마찬가지로 리소스 자체가 제거될 때만 리소스 할당을 삭제할 수 있습니다.
- 드라이버의 CreateResource 또는 OpenResource 함수를 호출하여 만들거나 연 공유 리소스에 대해 사용자 모드 표시 드라이버의 DestroyResource 함수가 호출되면 드라이버는 pfnDeallocateCb 함수를 호출할 때 D3DDDICB_DEALLOCATE 구조체의 hResource 멤버를 비 NULL로 설정하고 D3DDDICB_DEALLOCATE NumAllocations 멤버를 0으로 설정해야 리소스를 삭제하거나 닫습니다. 즉, 공유 리소스와 연결된 할당은 개별적으로 제거하거나 닫을 수 없습니다. 리소스는 pfnDeallocateCb에 대한 한 번의 호출에서 원자적으로 제거되거나 닫혀야 합니다.
- 할당 수는 리소스 종류에 대해 일관되어야 합니다(즉, 동일한 리소스 종류를 만드는 다른 프로세스는 동일한 수와 할당 유형을 생성해야 합니다). 또한 이러한 리소스에는 이름 바꾸기가 허용되지 않습니다.
- Flags 멤버의 정의되지 않은 비트가 예약되어 있습니다.
- 기본 비트 필드 플래그가 Flags에 설정되지 않은 경우 RefreshRate 및 출력 멤버가 예약됩니다.
- Flags에서 RenderTarget, DecodeRenderTarget 또는 VideoProcessRenderTarget 비트 필드 플래그가 설정되지 않은 경우 MultisampleType 및 MultisampleQuality 멤버가 예약됩니다.
- VertexBuffer 비트 필드 플래그가 Flags에 설정되지 않은 경우 Fvf 멤버가 예약됩니다.
- Texture, CubeMap 및 Volume 비트 필드 플래그가 Flags에 설정되지 않은 경우 MipLevels 멤버가 예약됩니다.
새 CreateResource DDI는 다음과 같은 방법으로 Microsoft Windows 2000 디스플레이 드라이버 모델의DdCreateSurface DDI와 다릅니다.
- 새 CreateResource DDI에서 표면은 명시적으로 연결되지 않습니다. 모든 첨부 파일은 원자성 생성에 의해 암시됩니다.
- 새 CreateResource DDI에서는 큐브 맵의 일부를 만들 수 없습니다.
런타임이 꼭짓점 또는 인덱스 버퍼를 만들도록 요청하고 사용자 모드 표시 드라이버가 메모리 부족(예: 하드웨어 지원 부족) 이외의 이유로 버퍼를 만들 수 없는 경우 드라이버는 D3DERR_NOTAVAILABLE 함께 실패해야 합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다. |
대상 플랫폼 | 데스크톱 |
머리글 | d3dumddi.h(D3dumddi.h 포함) |