Gestione delle risorse (Direct3D 9)
La gestione delle risorse è il processo in cui le risorse vengono alzate di livello dall'archiviazione di 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 fotogramma, tra IDirect3DDevice9::BeginScene e chiamate IDirect3DDevice9::EndScene.
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 persi e operativi 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 persistono durante le transizioni tra gli stati di perdita e operativi del dispositivo. Queste risorse esistono sia nella memoria video che in quella 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::Resete tali risorse continuano a funzionare normalmente senza essere ricaricati 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 i buffer degli indici, usati per attraversare un grafo della scena, eseguono il rendering ogni fotogramma esclusivamente della geometria visibile all'utente, e cambiano ad ogni fotogramma. Poiché le risorse gestite sono supportate dalla memoria di sistema, le modifiche costanti devono essere aggiornate nella memoria di sistema, causando una grave riduzione delle prestazioni. Per questo scenario specifico, è consigliabile usare D3DPOOL_DEFAULT insieme a D3DUSAGE_DYNAMIC.
Un altro esempio per cui la gestione delle risorse non è consigliata (e non consentita in modo esplicito dal runtime) è la gestione di una trama creata con D3DUSAGE_RENDERTARGET. Se la memoria usata dalle destinazioni di rendering fosse gestita dal runtime, il contenuto dovrà essere costantemente copiato 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::UpdateTextureo IDirect3DDevice9::UpdateSurface
Per altre informazioni sullo stato perso di un dispositivo, vedere Dispositivi persi (Direct3D 9).
Argomenti correlati