Gestione delle risorse (Direct3D 9)

Gestione delle risorse è il processo in cui le risorse vengono promosse dall'archiviazione di memoria di sistema ad archiviazione accessibile dal dispositivo ed eliminate dall'archiviazione accessibile dal dispositivo. Il tempo di esecuzione Direct3D dispone di un proprio algoritmo di gestione basato su una tecnica di priorità meno recente. Direct3D passa a una tecnica di priorità usata più di recente quando rileva che un maggior numero di risorse rispetto a quelle che possono coesistere nella memoria accessibile dal dispositivo viene usato in un singolo frame, tra IDirect3DDevice9:: BeginScene e IDirect3DDevice9:: EndScene chiamate.

Usare il flag _ predefinito D3DPOOL al momento della creazione per specificare che una risorsa è posizionata nel pool di memoria più appropriato per il set di utilizzi richiesti per la risorsa specificata. Si tratta in genere di memoria video, che include sia la memoria video locale che la memoria Accelerated Graphics Port (AGP). Le risorse nel pool predefinito non vengono mantenute attraverso le transizioni tra gli stati persi e operativi del dispositivo. Queste risorse devono essere rilasciate prima di chiamare Reset e devono quindi essere ricreate.

Usare il flag _ gestito D3DPOOL al momento della creazione per specificare una risorsa gestita. Le risorse gestite vengono mantenute attraverso le transizioni tra gli stati persi e operativi del dispositivo. Queste risorse sono disponibili sia nella memoria video che nella memoria di sistema. Una risorsa gestita verrà copiata nella memoria video quando necessario durante il rendering. Il dispositivo può essere ripristinato con una chiamata a IDirect3DDevice9:: Resete tali risorse continuano a funzionare normalmente senza essere ricaricate con i dati. Tuttavia, se il dispositivo deve essere eliminato e ricreato, è necessario ricreare tutte le risorse.

La gestione delle risorse non è consigliata per le risorse che cambiano con frequenza elevata. Ad esempio, i buffer vertex e index usati per attraversare un grafico della scena ogni frame che esegue il rendering della geometria visibile all'utente cambia ogni frame. Poiché le risorse gestite sono supportate dalla memoria di sistema, le modifiche costanti devono essere aggiornate nella memoria di sistema, il che può causare un peggioramento delle prestazioni. Per questo scenario specifico, è necessario 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 utilizzata dalle destinazioni di rendering è stata gestita dal runtime, è necessario che il relativo contenuto venga costantemente copiato nella memoria di sistema durante il rendering, causando un notevole calo delle prestazioni. Per questo motivo, è necessario creare le destinazioni di rendering 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 con IDirect3DDevice9:: UpdateTextureo IDirect3DDevice9:: UpdateSurface

Per altre informazioni sullo stato di smarrimento di un dispositivo, vedere dispositivi persi (Direct3D 9).

Risorse Direct3D