Gestione delle risorse (Direct3D 9)

La gestione delle risorse è il processo in cui le risorse vengono alzate di livello dall'archiviazione in memoria di sistema all'archiviazione accessibile dal dispositivo e rimosse dall'archiviazione accessibile dal dispositivo. Il runtime Direct3D ha un proprio algoritmo di gestione basato su una tecnica di priorità usata meno di recente. Direct3D passa a una tecnica di priorità usata più di recente quando rileva che più risorse che possono coesistere nella memoria accessibile dal dispositivo vengono usate in un singolo frame, tra IDirect3DDevice9::BeginScene e IDirect3DDevice9::EndScene chiamate.

Usare il flag D3DPOOL_DEFAULT in fase di creazione per specificare che una risorsa viene inserita nel pool di memoria più appropriata per il set di utilizzi richiesti per la risorsa specificata. Questa è in genere la memoria video, inclusa la memoria video locale e la memoria AGP (Graphics Port) accelerata. Le risorse nel pool predefinito non vengono mantenute tramite transizioni tra gli stati operativi e persi del dispositivo. Queste risorse devono essere rilasciate prima di chiamare la reimpostazione e devono quindi essere ricreate.

Usare il flag D3DPOOL_MANAGED in fase di creazione per specificare una risorsa gestita. Le risorse gestite vengono mantenute tramite transizioni tra gli stati operativi e persi del dispositivo. Queste risorse esistono sia in memoria video che in memoria di sistema. Una risorsa gestita verrà copiata nella memoria video quando è necessaria durante il rendering. Il dispositivo può essere ripristinato con una chiamata a IDirect3DDevice9::Reset e tali risorse continuano a funzionare normalmente senza essere ricaricate con i dati. Tuttavia, se il dispositivo deve essere eliminato e ricreato, tutte le risorse devono essere ricreate.

La gestione delle risorse non è consigliata per le risorse che cambiano con frequenza elevata. Ad esempio, i buffer dei vertici e degli indici usati per attraversare un grafico della scena ogni fotogramma visualizza solo la geometria visibile all'utente cambia ogni fotogramma. Poiché le risorse gestite sono supportate dalla memoria di sistema, le modifiche costanti devono essere aggiornate nella memoria di sistema, che può causare una grave riduzione delle prestazioni. Per questo particolare scenario, è necessario usare D3DPOOL_DEFAULT insieme a D3DUSAGE_DYNAMIC .

Un altro esempio per cui la gestione delle risorse non è consigliata (e esplicitamente non consentita dal runtime) è la gestione di una trama creata con D3DUSAGE_RENDERTARGET. Se la memoria usata dalle destinazioni di rendering è stata gestita dal runtime, è necessario copiare costantemente il contenuto nella memoria di sistema durante il rendering, causando notevoli sanzioni per le prestazioni. Per questo motivo, le destinazioni di rendering devono essere create nel pool predefinito. Se è necessario l'accesso alla CPU dei dati contenuti in una destinazione di rendering, i dati devono essere copiati in una risorsa creata in D3DPOOL_SYSTEMMEM usando IDirect3DDevice9::UpdateTexture o IDirect3DDevice9::UpdateSurface

Per altre informazioni sullo stato perso di un dispositivo, vedere Dispositivi persi (Direct3D 9).For more information about the lost state of a device, see Lost Devices (Direct3D 9).

Risorse Direct3D