Condividi tramite


Handle di runtime e driver Direct3D versione 10

Il runtime e i driver Direct3D versione 10 condividono lo stesso intervallo di vita. Il runtime Direct3D specifica la durata di un oggetto tra chiamate a funzioni di tipo create(ad esempio CreateResource(D3D10) e chiamate a funzioni di tipo distrutto (ad esempio, DestroyResource(D3D10)). Il runtime fornisce valori di gestione driver e valori di gestione del runtime. Questi handle sono essenzialmente puntatori che vengono sottoposti a wrapping con un tipo sicuro per identificare l'oggetto in uso. Di seguito sono riportati esempi di handle di runtime e driver per le risorse:

// Strongly typed handle to identify a resource object to the driver: 
typedef struct D3D10DDI_HRESOURCE
{
    void* pDrvPrivate; // Pointer to memory location as large as the driver requested.
} D3D10DDI_HRESOURCE;

// Strongly typed handle to identify a resource object to the runtime:
typedef struct D3D10DDI_HRTRESOURCE
{
    void* handle;
} D3D10DDI_HRTRESOURCE;

Tutti gli handle driver per un oggetto dispositivo di rendering e i relativi oggetti figlio subiscono il meccanismo di creazione a due passaggi seguente:

  1. Per determinare il valore del puntatore dell'handle driver, il runtime chiama prima una funzione CalcPrivateObjTypeSize , ad esempio la funzione CalcPrivateResourceSize . In questa chiamata il runtime passa i parametri di creazione, ad esempio un puntatore alla struttura D3D10DDIARG_CREATERESOURCE . Il runtime passa anche i parametri di creazione nella chiamata a una funzione CreateObjType .

    Il driver di visualizzazione in modalità utente non è in genere necessario allocare nulla durante una chiamata a CalcPrivateObjTypeSize. Tuttavia, se il driver ha esito negativo o deve indicare qualsiasi altro tipo di condizione di errore, il driver può restituire SIZE_T( -1 ) per impedire la creazione dell'handle. Il runtime restituisce quindi una condizione di errore E_OUTOFMEMORY all'applicazione chiamante.

    Minimamente, il driver deve restituire dimensioniof( void* ) da una chiamata a CalcPrivateObjTypeSize.

  2. Se il runtime può allocare spazio sufficiente per soddisfare le dimensioni richieste dal driver di visualizzazione in modalità utente, il runtime chiamerà quindi una funzione CreateObjType (ad esempio CreateResource(D3D10)) con gli stessi parametri di creazione, insieme al nuovo valore univoco per l'handle del driver. Il valore puntatore dell'handle del driver sarà univoco e costante per l'intervallo di vita dell'handle, poiché punta a un'area di memoria delle dimensioni restituite da CalcPrivateObjTypeSize. Il driver di visualizzazione in modalità utente può usare questa area di memoria in base alle esigenze. Il driver dovrebbe ottenere un aumento dell'efficienza individuando tutti i dati a cui si accede frequentemente nell'area di memoria fornita dal runtime.