Condividi tramite


Gestione automatica trame (Direct3D 9)

La gestione delle trame è il processo di determinazione delle trame necessarie per il rendering in un determinato momento e la garanzia che tali trame vengano caricate in memoria video. Come per qualsiasi algoritmo, gli schemi di gestione delle trame variano in complessità, ma qualsiasi approccio alla gestione delle trame comporta le attività chiave seguenti.

  • Rilevamento della quantità di memoria della trama disponibile.
  • Calcolo delle trame necessarie per il rendering e che non sono.
  • Determinare quali risorse di trama esistenti possono essere ricaricate con un'altra immagine di trama e quali superfici devono essere eliminate e sostituite con nuove risorse di trama.

Direct3D implementa la gestione della trama supportata dal sistema per garantire che le trame vengano caricate per prestazioni ottimali. Le risorse di trama gestite da Direct3D vengono definite trame gestite.

Il gestore trame tiene traccia delle trame con un timestamp che identifica quando la trama è stata usata per l'ultima volta. Usa quindi un algoritmo usato meno di recente per determinare quali trame devono essere rimosse. Le priorità della trama vengono usate come tie breaker quando due trame sono destinate alla rimozione dalla memoria. Se due trame hanno lo stesso valore di priorità, la trama utilizzata meno di recente viene rimossa. Tuttavia, se due trame hanno lo stesso timestamp, la trama con priorità inferiore viene rimossa prima.

È necessario richiedere la gestione automatica delle trame per le superfici di trama quando vengono create. Per recuperare una trama gestita in un'applicazione C++, creare una risorsa trama chiamando IDirect3DDevice9::CreateTexture e specificando il D3DPOOL_MANAGED per il parametro Pool. Non è consentito specificare dove si vuole creare la trama. Non è possibile usare i flag di D3DPOOL_DEFAULT o di D3DPOOL_SYSTEMMEM durante la creazione di una trama gestita. Dopo aver creato la trama gestita, è possibile chiamare il metodo IDirect3DDevice9::SetTexture per impostarlo su una fase nella trama del dispositivo di rendering a cascata.

È possibile assegnare una priorità alle trame gestite chiamando il metodo IDirect3DResource9::SetPriority per la superficie di trama.

Direct3D scarica automaticamente trame in memoria video in base alle esigenze. Il sistema potrebbe memorizzare nella cache trame gestite in memoria video locale o non locale, a seconda della disponibilità di memoria video non locale o di altri fattori. Il percorso della cache delle trame gestite non viene comunicato all'applicazione, né queste informazioni devono usare la gestione automatica delle trame. Se l'applicazione usa più trame che possono adattarsi alla memoria video, Direct3D rimuove le trame meno recenti dalla memoria video per rendere la stanza per le nuove trame. Se si usa di nuovo una trama rimossa, il sistema usa la superficie di trama di memoria del sistema originale per ricaricare la trama nella cache della memoria video. Anche se il ricaricamento della trama è necessario, riduce anche le prestazioni dell'applicazione.

È possibile modificare dinamicamente la copia originale della memoria di sistema della trama aggiornando o bloccando la risorsa trama. Quando il sistema rileva una superficie sporca, dopo il completamento di un aggiornamento o quando la superficie viene sbloccata, la gestione trame aggiorna automaticamente la copia della memoria video della trama. Il successo delle prestazioni è simile al ricaricamento di una trama rimossa.

Quando si immette un nuovo livello in un gioco, l'applicazione potrebbe dover scaricare tutte le trame gestite dalla memoria video (chiamando IDirect3DDevice9::EvictManagedResources).

Per altre informazioni sulla gestione delle risorse, vedere Gestione delle risorse (Direct3D 9).

Trame Direct3D