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 함수를 호출하여 하나 이상의 메모리 할당을 만들 수 있습니다. 사용자 모드 표시 드라이버는 표면당 여러 할당을 만들어야 하는지, 모든 표면에 대해 하나의 할당을 만들어야 하는지 또는 표면당 하나의 할당을 만들어야 하는지를 결정해야 합니다. 할당에 대한 자세한 내용은 Video Memory Management 및 GPU 예약을 참조하세요.
리소스는 여러 디바이스(hDevice) 및 프로세스에서 공유할 수 있습니다. 런타임은 D3DDDIARG_CREATERESOURCE Flags 멤버에서 SharedResource 비트 필드 플래그를 설정하여 리소스가 공유되도록 지정합니다. 이 비트 필드 플래그가 설정된 경우 사용자 모드 표시 드라이버는 공유 리소스에 대해 다음과 같은 제한을 준수해야 합니다.
- 사용자 모드 표시 드라이버는 pfnAllocateCb 및 pfnDeallocateCb 함수를 각각 한 번만 호출할 수 있습니다.
- 사용자 모드 표시 드라이버는 리소스를 처음 만든 후에는 리소스에 대한 추가 할당을 만들 수 없으며, 마찬가지로 리소스 자체가 제거될 때만 리소스 할당을 삭제할 수 있습니다.
- 드라이버의 CreateResource 또는 OpenResource 함수 호출을 통해 생성되거나 열린 공유 리소스에 대해 사용자 모드 표시 드라이버의 DestroyResource 함수가 호출되면 드라이버는 pfnDeallocateCb 함수를 호출할 때 D3DDDICB_DEALLOCATE 구조체의 hResource 멤버를 비 NULL로 설정하고 D3DDDICB_DEALLOCATE NumAllocations 멤버를 0으로 설정하여 리소스를 삭제하거나 닫아야 합니다. 즉, 공유 리소스와 연결된 할당은 개별적으로 제거하거나 닫을 수 없습니다. pfnDeallocateCb에 대한 한 번의 호출에서 리소스를 원자적으로 제거하거나 닫아야 합니다.
- 할당 수는 리소스 유형에 대해 일관되어야 합니다(즉, 동일한 리소스 유형을 만드는 다른 프로세스는 동일한 수와 할당 유형을 생성해야 합니다). 또한 이러한 리소스에는 이름 바꾸기가 허용되지 않습니다.
- Flags 멤버의 정의되지 않은 비트가 예약되어 있습니다.
- 플래그에 기본 비트 필드 플래그가 설정되지 않은 경우 RefreshRate 및 출력 멤버가 예약됩니다.
- RenderTarget, DecodeRenderTarget 또는 VideoProcessRenderTarget 비트 필드 플래그가 Flags에 설정되지 않은 경우 MultisampleType 및 MultisampleQuality 멤버가 예약됩니다.
- Flags에서 VertexBuffer 비트 필드 플래그를 설정하지 않으면 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 포함) |
참고 항목
피드백
다음에 대한 사용자 의견 제출 및 보기