다음을 통해 공유


리소스 관리(Direct3D 9)

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

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

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

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

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

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

Direct3D 리소스