共用方式為


自動紋理管理 (Direct3D 9)

紋理管理是判斷在指定時間轉譯所需的紋理,並確保這些紋理已載入視訊記憶體的程式。 與任何演算法一樣,紋理管理配置會因複雜度而異,但紋理管理的任何方法都牽涉到下列主要工作。

  • 追蹤可用的紋理記憶體數量。
  • 計算轉譯所需的紋理,以及哪些紋理不是。
  • 判斷哪些現有紋理資源可以使用另一個紋理影像重載,以及應該終結哪些表面,並以新的紋理資源取代。

Direct3D 會實作系統支援的紋理管理,以確保已載入紋理以獲得最佳效能。 Direct3D 管理的紋理資源稱為受控紋理。

紋理管理員會使用時間戳追蹤紋理,以識別上次使用紋理的時間。 然後,它會使用最近最少使用的演算法來判斷應移除哪些紋理。 當有兩個紋理設為從記憶體移除的目標時,紋理優先順序會當做系結斷器使用。 如果兩個紋理具有相同的優先順序值,則會移除最近使用最少的紋理。 不過,如果兩個紋理具有相同時間戳,則會先移除優先順序較低的紋理。

當您建立紋理表面時,您會要求紋理表面的自動紋理管理。 若要在C++應用程式中擷取受控紋理,請呼叫 IDirect3DDevice9::CreateTexture 並指定 Pool 參數的D3DPOOL_MANAGED,以建立紋理資源。 您無法指定您要建立紋理的位置。 您無法在建立 Managed 紋理時使用D3DPOOL_DEFAULT或D3DPOOL_SYSTEMMEM旗標。 建立受控紋理之後,您可以呼叫 IDirect3DDevice9::SetTexture 方法,將它設定為轉譯裝置紋理串聯中的階段。

您可以呼叫紋理介面的 IDirect3DResource9::SetPriority 方法,將優先順序指派給 Managed 紋理。

Direct3D 會視需要自動將紋理下載到視訊記憶體中。 系統可能會根據非本機或非本機視訊記憶體的可用性,在本機或非本機視訊記憶體中快取 Managed 紋理。 受控紋理的快取位置不會與您的應用程式通訊,也不需要此資訊才能使用自動紋理管理。 如果您的應用程式使用比可放入視訊記憶體更多的紋理,Direct3D 會從視訊記憶體中移除較舊的紋理,以騰出空間供新的紋理使用。 如果您再次使用移除的紋理,系統會使用原始的系統記憶體紋理表面,在視訊記憶體快取中重載紋理。 雖然需要重載紋理,但它也會降低應用程式的效能。

您可以更新或鎖定紋理資源,以動態方式修改紋理的原始系統記憶體複本。 當系統偵測到骯髒的表面 - 更新完成後,或當表面解除鎖定時 - 紋理管理員會自動更新紋理的視訊記憶體複本。 產生的效能命中類似於重載移除的紋理。

在遊戲中輸入新層級時,您的應用程式可能需要從視訊記憶體清除所有受控紋理(藉由呼叫 IDirect3DDevice9::EvictManagedResources)。

如需資源管理的詳細資訊,請參閱 管理資源 (Direct3D 9)

Direct3D 紋理