자동 텍스처 관리(Direct3D 9)

텍스처 관리는 지정된 시간에 렌더링하는 데 필요한 텍스처를 결정하고 해당 텍스처가 비디오 메모리에 로드되도록 하는 프로세스입니다. 모든 알고리즘과 마찬가지로 텍스처 관리 체계는 복잡성에 따라 다르지만 텍스처 관리에 대한 모든 접근 방식에는 다음과 같은 주요 작업이 포함됩니다.

  • 사용 가능한 텍스처 메모리의 양을 추적합니다.
  • 렌더링에 필요한 텍스처와 그렇지 않은 텍스처를 계산합니다.
  • 다른 텍스처 이미지로 다시 로드할 수 있는 기존 텍스처 리소스와 제거하여 새 텍스처 리소스로 대체해야 하는 표면을 결정합니다.

Direct3D는 시스템 지원 텍스처 관리를 구현하여 최적의 성능을 위해 텍스처가 로드되도록 합니다. Direct3D에서 관리하는 텍스처 리소스를 관리되는 텍스처라고 합니다.

텍스처 관리자는 텍스처가 마지막으로 사용된 시기를 식별하는 타임스탬프를 사용하여 텍스처를 추적합니다. 그런 다음, 가장 최근에 사용한 알고리즘을 사용하여 제거해야 하는 텍스처를 결정합니다. 두 개의 텍스처가 메모리에서 제거를 대상으로 하는 경우 텍스처 우선 순위는 타이 브레이커로 사용됩니다. 두 텍스처의 우선 순위 값이 같으면 가장 최근에 사용한 텍스처가 제거됩니다. 그러나 두 텍스처가 동일한 타임스탬프를 갖는 경우 우선 순위가 낮은 텍스처가 먼저 제거됩니다.

텍스처 표면을 만들 때 자동 텍스처 관리를 요청합니다. C++ 애플리케이션에서 관리되는 텍스처를 검색하려면 IDirect3DDevice9::CreateTexture 를 호출하고 Pool 매개 변수에 대한 D3DPOOL_MANAGED 지정하여 텍스처 리소스를 만듭니다. 텍스처를 만들 위치를 지정할 수 없습니다. 관리되는 텍스처를 만들 때는 D3DPOOL_DEFAULT 또는 D3DPOOL_SYSTEMMEM 플래그를 사용할 수 없습니다. 관리되는 텍스처를 만든 후 IDirect3DDevice9::SetTexture 메서드를 호출하여 렌더링 디바이스의 텍스처 계단식의 단계로 설정할 수 있습니다.

텍스처 표면에 대해 IDirect3DResource9::SetPriority 메서드를 호출하여 관리되는 텍스처에 우선 순위를 할당할 수 있습니다.

Direct3D는 필요에 따라 텍스처를 비디오 메모리에 자동으로 다운로드합니다. 시스템은 비로컬 비디오 메모리 또는 기타 요인의 가용성에 따라 로컬 또는 비로컬 비디오 메모리에 관리되는 텍스처를 캐시할 수 있습니다. 관리되는 텍스처의 캐시 위치는 애플리케이션에 전달되지 않으며 자동 텍스처 관리를 사용하는 데 이 정보도 필요하지 않습니다. 애플리케이션에서 비디오 메모리에 들어갈 수 있는 것보다 더 많은 텍스처를 사용하는 경우 Direct3D는 비디오 메모리에서 이전 텍스처를 제거하여 새 텍스처를 위한 공간을 만듭니다. 제거된 텍스처를 다시 사용하는 경우 시스템은 원래 시스템 메모리 텍스처 표면을 사용하여 비디오 메모리 캐시의 텍스처를 다시 로드합니다. 텍스처를 다시 로드해야 하지만 애플리케이션의 성능도 저하됩니다.

텍스처 리소스를 업데이트하거나 잠그면 텍스처의 원래 시스템 메모리 복사본을 동적으로 수정할 수 있습니다. 시스템이 더티 표면을 감지하는 경우(업데이트가 완료된 후 또는 표면이 잠금 해제된 경우) 텍스처 관리자는 텍스처의 비디오 메모리 복사본을 자동으로 업데이트합니다. 발생한 성능 적중은 제거된 텍스처를 다시 로드하는 것과 유사합니다.

게임에 새 수준을 입력할 때 애플리케이션은 IDirect3DDevice9::EvictManagedResources를 호출하여 비디오 메모리에서 모든 관리되는 텍스처를 플러시해야 할 수 있습니다.

리소스 관리에 대한 자세한 내용은 리소스 관리(Direct3D 9)를 참조하세요.

Direct3D 텍스처