리소스 관리(Direct3D 9)

리소스 관리는 리소스가 시스템 메모리 스토리지에서 디바이스 액세스 가능 스토리지로 승격되고 디바이스 액세스 가능 스토리지에서 삭제되는 프로세스입니다. Direct3D 런타임에는 가장 최근에 사용한 우선 순위 기술을 기반으로 하는 자체 관리 알고리즘이 있습니다. Direct3D는 IDirect3DDevice9::BeginScene 및 IDirect3DDevice9::EndScene 호출 사이에 디바이스 액세스 가능 메모리에 공존할 수 있는 것보다 많은 리소스가 단일 프레임에서 사용되는 것을 감지하면 가장 최근에 사용되는 우선 순위 기술 전환됩니다.

생성 시 D3DPOOL_DEFAULT 플래그를 사용하여 지정된 리소스에 대해 요청된 사용량 집합에 가장 적합한 리소스를 메모리 풀에 배치하도록 지정합니다. 이는 일반적으로 로컬 비디오 메모리와 AGP(가속 그래픽 포트) 메모리를 모두 포함하는 비디오 메모리입니다. 기본 풀의 리소스는 디바이스의 손실 상태와 작동 상태 간의 전환을 통해 유지되지 않습니다. 이러한 리소스는 재설정을 호출하기 전에 해제해야 하며 다시 만들어야 합니다.

생성 시 D3DPOOL_MANAGED 플래그를 사용하여 관리되는 리소스를 지정합니다. 관리되는 리소스는 디바이스의 손실 상태와 작동 상태 간의 전환을 통해 유지됩니다. 이러한 리소스는 비디오 및 시스템 메모리에 모두 존재합니다. 렌더링하는 동안 필요한 경우 관리되는 리소스가 비디오 메모리에 복사됩니다. IDirect3DDevice9::Reset 호출을 사용하여 디바이스를 복원할 수 있으며, 이러한 리소스는 데이터로 다시 로드되지 않고도 정상적으로 계속 작동합니다. 그러나 디바이스를 제거하고 다시 만들어야 하는 경우 모든 리소스를 다시 만들어야 합니다.

빈도가 높은 리소스에는 리소스 관리가 권장되지 않습니다. 예를 들어 장면 그래프를 트래버스하는 데 사용되는 꼭짓점 및 인덱스 버퍼는 사용자에게 표시되는 기하 도형만 렌더링하는 모든 프레임을 변경합니다. 관리되는 리소스는 시스템 메모리에서 지원되므로 시스템 메모리에서 일정한 변경 내용을 업데이트해야 하므로 성능이 심각하게 저하될 수 있습니다. 이 특정 시나리오의 경우 D3DUSAGE_DYNAMIC 함께 D3DPOOL_DEFAULT 사용해야 합니다.

리소스 관리가 권장되지 않고 런타임에서 명시적으로 허용되지 않는 또 다른 예는 D3DUSAGE_RENDERTARGET 사용하여 만든 텍스처를 관리하는 것입니다. 렌더링 대상에서 사용하는 메모리가 런타임에서 관리되는 경우 렌더링하는 동안 콘텐츠가 시스템 메모리에 지속적으로 복사되어야 하므로 성능이 저하됩니다. 이러한 이유로 렌더링 대상은 기본 풀에 만들어야 합니다. 렌더링 대상에 포함된 데이터의 CPU 액세스가 필요한 경우 IDirect3DDevice9::UpdateTexture 또는 IDirect3DDevice9::UpdateSurface를 사용하여 D3DPOOL_SYSTEMMEM 만든 리소스에 데이터를 복사해야 합니다.

디바이스의 분실 상태에 대한 자세한 내용은 분실 디바이스(Direct3D 9)를 참조하세요.

Direct3D 리소스