리소스 관리 (Direct3D 9)

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

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

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

높은 빈도로 변경 되는 리소스에는 리소스 관리를 사용 하지 않는 것이 좋습니다. 예를 들어 장면 그래프를 트래버스하는 데 사용 되는 꼭 짓 점 및 인덱스 버퍼는 모든 프레임 렌더링에서 사용자에 게 표시 되는 기 하 도형에만 적용 됩니다. 관리 되는 리소스는 시스템 메모리에서 지원 되기 때문에 시스템 메모리에서 상수 변경이 업데이트 되어야 하므로 성능이 심각 하 게 저하 될 수 있습니다. 이 특정 시나리오에서는 D3DUSAGE _ DYNAMIC 과 함께 D3DPOOL _ DEFAULT 를 사용 해야 합니다.

리소스 관리를 권장 하지 않고 런타임에서 명시적으로 허용 하지 않는 또 다른 예는 D3DUSAGE _ rendertarget을 사용 하 여 만든 질감을 관리 하는 것입니다. 렌더링 대상에서 사용 하는 메모리가 런타임에 의해 관리 되는 경우 렌더링 중에 지속적으로 시스템 메모리에 복사 하 여 성능 저하를 발생 시 키도 합니다. 이러한 이유로 렌더링 대상은 기본 풀에서 만들어야 합니다. 렌더링 대상에 포함 된 데이터의 CPU 액세스가 필요한 경우에는 IDirect3DDevice9:: UpdateTexture또는 IDirect3DDevice9:: UpdateSurface 를 사용 하 여 D3DPOOL _ systemmem 에 생성 된 리소스에 데이터를 복사 해야 합니다.

장치의 분실 상태에 대 한 자세한 내용은 분실 한 장치 (Direct3D 9)를 참조 하세요.

Direct3D 리소스