DirectX Graphics 프로그래밍 가이드 고정 기능 파이프라인 텍스처 자동 텍스처 관리   [목차열람] [주소복사] [슬롯비우기]
자동 텍스처 관리
 
Microsoft DirectX 9.0

자동 텍스처 관리


텍스처 관리란, 어떤 시점에 있어 어느 텍스처가 렌더링에 필요한가를 판단해, 그러한 텍스처를 비디오 메모리에 확실히 로드하는 처리이다. 다른 알고리즘과 같이, 텍스처 관리 스킴도 그 복잡함은 다양하지만, 어떠한 어프로치로 텍스처 관리를 실시하는 경우여도, 이하에 나타내는 태스크가 중요하다.

Microsoft® Direct3D® 에서는, 시스템에 의한 텍스처 관리가 처리 되고 있어 텍스처는 퍼포먼스 최적화를 위해서(때문에) 확실히 로드 된다. Direct3D 가 관리하는 텍스처 소스를 관리되는 텍스처라고 부른다.

텍스처 관리는, 텍스처의 최종 사용시를 나타내는 타임 스탬프를 이용해 텍스처를 추적한다. 다음에, LRU (least-recently-used) 알고리즘을 이용해, 삭제할 필요가 있는 텍스처를 판단한다. 메모리로부터 삭제하는 텍스처가 2 개 있는 경우, 텍스처의 우선도에 근거해 텍스처가 삭제된다. 2 개의 텍스처의 우선도가 같은 경우는, 최종 사용시가 새로운 (분)편의 텍스처가 삭제된다. 다만, 2 개의 텍스처로 타임 스탬프가 같은 경우는, 우선도의 낮은 텍스처가 먼저 삭제된다.

텍스처를 생성 할 경우에, 그 텍스처의 자동 텍스처 관리를 요구한다. C++ 애플리케이션으로 관리되는 텍스처를 얻어오려면,IDirect3DDevice9::CreateTexture 를 호출해,Pool 파라미터에 D3DPOOL_MANAGED 를 지정해, 텍스처 소스를 생성 한다. 다만, 텍스처의 생성 장소를 지정할 수 없다. 관리되는 텍스처를 생성 할 경우에는, D3DPOOL_DEFAULT 또는 D3DPOOL_SYSTEMMEM 플래그는 사용할 수 없다. 관리되는 텍스처를 생성 한 후,IDirect3DDevice9::SetTexture 메서드를 호출해, 그 관리되는 텍스처를 렌더링 장치의 텍스처 cascade의 스테이지로 설정할 수 있다.

텍스처 표면에 대해서 IDirect3DResource9::SetPriority 메서드를 호출해, 관리되는 텍스처에 우선도를 할당할 수가 있다.

Direct3D 에서는, 필요에 따라서 텍스처를 비디오 메모리에 자동적으로 다운로드할 수 있는 시스템이, 비로컬 비디오 메모리나 그 외의 요소가 사용 가능한지 어떤지에 의해, 관리되는 텍스처를 로컬 또는 비로컬 비디오 메모리에 캐쉬한다. 관리되는 텍스처가 캐쉬되는 장소는, 애플리케이션에 통지되지 않는다. 자동 텍스처 관리를 이용할 때에, 이 정보는 필요없다. 애플리케이션으로 사용하는 텍스처가 비디오 메모리에 들어가지 않을 정도(수록) 있는 경우, Direct3D 는 비디오 메모리로부터 낡은 텍스처를 삭제해, 새로운 텍스처용의 영역을 확보한다. 삭제한 텍스처를 다시 사용하는 경우, 시스템은 원의 시스템 메모리 텍스처 표면을 사용해, 텍스처를 비디오 메모리 캐쉬에 재로드한다. 텍스처의 재로드는 필요하지만, 이것을 실시하면 애플리케이션의 퍼포먼스가 저하한다.

텍스처 소스를 갱신 또는 잠그는 것으로, 텍스처의 오리지날 시스템 메모리 복사를 동적으로 변경할 수 있다. 더티 표면이 검출되었을 경우 (갱신의 완료 후, 또는 표면의 언락시), 텍스처 관리는 텍스처의 비디오 메모리 복사를 자동적으로 갱신한다. 이 때의 퍼포먼스는, 삭제된 텍스처를 재로드하는 경우와 같다.

게임에서 새로운 레벨로 옮길 때,IDirect3DDevice9::EvictManagedResources 를 호출해, 애플리케이션으로 비디오 메모리로부터 모든 관리되는 텍스처를 플래시 해야 할 때가 있다.

리소스 관리의 더 자세한 정보는, 「리소스의 관리」를 참조할것.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP