다음을 통해 공유


디바이스 유형 및 꼭짓점 처리 요구 사항(Direct3D 9)

변환 및 조명을 비롯한 꼭짓점 처리 작업의 성능은 메모리에 꼭짓점 버퍼가 있는 위치와 사용 중인 렌더링 디바이스 유형에 따라 크게 달라집니다. 애플리케이션은 꼭짓점 버퍼를 만들 때 메모리 할당을 제어합니다. D3DPOOL_SYSTEMMEM 메모리 플래그가 설정되면 꼭짓점 버퍼가 시스템 메모리에 만들어집니다. D3DPOOL_DEFAULT 메모리 플래그를 사용하는 경우 디바이스 드라이버는 꼭짓점 버퍼에 대한 메모리가 가장 잘 할당되는 위치를 결정하며 드라이버 최적 메모리라고도 합니다. 드라이버 최적 메모리는 로컬 비디오 메모리, 비로컬 비디오 메모리 또는 시스템 메모리일 수 있습니다.

IDirect3DDevice9::CreateVertexBuffer 사용하여 D3DUSAGE_SOFTWAREPROCESSING 상수로 설정하면 꼭짓점 버퍼 데이터에 대한 소프트웨어 꼭짓점 처리가 가능합니다. 이 플래그는 혼합 모드에서 소프트웨어 꼭짓점 처리에 필요합니다. 하드웨어 꼭짓점 처리 모드에는 플래그를 사용할 수 없습니다. 소프트웨어 꼭짓점 처리에 사용되는 꼭짓점 버퍼는 다음과 같습니다.

꼭짓점 버퍼의 메모리 위치(시스템 또는 드라이버 최적)를 결정하는 데 사용하는 추론은 텍스처의 경우와 동일합니다. 하드웨어에서 변환 및 조명을 포함한 꼭짓점 처리는 드라이버 최적 메모리에 꼭짓점 버퍼가 할당될 때 가장 잘 작동하지만 소프트웨어 꼭짓점 처리는 시스템 메모리에 할당된 꼭짓점 버퍼에서 가장 잘 작동합니다. 텍스처의 경우 하드웨어 래스터화는 드라이버 최적 메모리에 텍스처가 할당될 때 가장 잘 작동하지만 소프트웨어 래스터화는 시스템 메모리 텍스처에서 가장 잘 작동합니다.

Microsoft Direct3D 9는 IDirect3DDevice9::P rocessVertices 메서드를 사용하여 기본 형식을 렌더링하지 않고도 꼭짓점의 독립 실행형 처리를 지원합니다. 이 독립 실행형 꼭짓점 처리는 항상 호스트 프로세서의 소프트웨어에서 수행됩니다. 이 때문에 IDirect3DDevice9::SetStreamSource 사용하여 원본 집합으로 사용되는 꼭짓점 버퍼는 D3DUSAGE_SOFTWAREPROCESSING 플래그를 사용하여 만들어야 합니다. IDirect3DDevice9::ProcessVertices가 제공하는 기능은 소프트웨어 버텍스 처리를 사용하는 동안 IDirect3DDevice9::DrawPrimitiveIDirect3DDevice9::DrawIndexedPrimitive 메서드의 기능과 동일합니다.

애플리케이션이 자체 꼭짓점 처리를 수행하고 변환, 조명 및 잘린 꼭짓점을 렌더링 메서드에 전달하는 경우 애플리케이션은 드라이버 최적 메모리에 할당된 꼭짓점 버퍼에 꼭짓점을 직접 쓸 수 있습니다. 이 기술은 나중에 중복 복사 작업을 방지합니다. 드라이버 최적 메모리에서 호스트가 수행한 읽기 작업은 매우 느릴 수 있으므로 애플리케이션이 꼭짓점 버퍼에서 데이터를 다시 읽는 경우에는 이 기술이 제대로 작동하지 않습니다. 따라서 애플리케이션이 처리 중 데이터 읽기나 버퍼에 데이터를 불규칙적으로 쓸 필요가 있다면, 시스템 메모리의 버텍스 버퍼를 선택하는 것이 좋습니다.

Direct3D 꼭짓점 처리 기능을 사용하는 경우(변환되지 않은 꼭짓점을 꼭짓점 버퍼 렌더링 메서드에 전달) 디바이스 유형 및 디바이스 생성 플래그에 따라 하드웨어 또는 소프트웨어에서 처리가 발생할 수 있습니다. 대부분의 경우에 최상의 성능을 위해 꼭짓점 버퍼를 풀 D3DPOOL_DEFAULT에 할당할 것을 권장합니다. 디바이스에서 하드웨어 꼭짓점 처리를 사용하는 경우 플래그 D3DUSAGE_DYNAMIC 및 D3DUSAGE_WRITEONLY 따라 수행할 수 있는 여러 가지 추가 최적화가 있습니다. 이러한 플래그 사용에 대한 자세한 내용은 IDirect3DDevice9::CreateVertexBuffer를 참조하세요.

꼭짓점 버퍼