Identificador de Driver e Runtime do Direct3D Versão 10
Os identificadores de runtime e driver do Direct3D versão 10 compartilham o mesmo período de vida útil. O runtime do Direct3D especifica o tempo de vida de um objeto entre chamadas para funções de tipo de criação (por exemplo, CreateResource(D3D10)) e chamadas para funções de tipo de destruição (por exemplo, DestroyResource(D3D10)). O runtime fornece valores de identificador de driver, bem como valores de identificador de runtime. Esses identificadores são essencialmente ponteiros encapsulados com um tipo forte para identificar o objeto em que está sendo operado. Veja a seguir exemplos de runtime e identificadores de driver para recursos:
// 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;
Todos os identificadores de driver para um objeto de dispositivo de renderização e seus objetos filhos passam pelo seguinte mecanismo de criação de duas passões:
Para determinar o valor do ponteiro do identificador do driver, o runtime primeiro chama uma função CalcPrivateObjTypeSize (por exemplo, a função CalcPrivateResourceSize ). Nessa chamada, o runtime passa os parâmetros de criação (por exemplo, um ponteiro para a estrutura D3D10DDIARG_CREATERESOURCE ). O runtime também passa os parâmetros de criação na chamada para uma função CreateObjType .
O driver de exibição do modo de usuário geralmente não é necessário para alocar nada durante uma chamada para CalcPrivateObjTypeSize. No entanto, se o driver fizer e falhar ou precisar indicar qualquer outro tipo de condição de falha, o driver poderá retornar SIZE_T( -1 ) para impedir a criação do identificador. Em seguida, o runtime retorna uma condição de erro E_OUTOFMEMORY para o aplicativo de chamada.
Minimamente, o driver deve retornar sizeof( void* ) de uma chamada para CalcPrivateObjTypeSize.
Se o runtime puder alocar espaço suficiente para atender ao tamanho exigido pelo driver de exibição do modo de usuário, o runtime chamará uma função CreateObjType (por exemplo, CreateResource(D3D10)) com os mesmos parâmetros de criação, juntamente com o novo valor exclusivo para o identificador de driver. O valor do ponteiro do identificador do driver será exclusivo e constante para o período de vida útil do identificador, pois aponta para uma região de memória do tamanho do qual foi retornado por CalcPrivateObjTypeSize. O driver de exibição do modo de usuário pode usar essa região de memória conforme necessário. O driver deve obter um aumento na eficiência localizando todos os dados acessados com frequência na região de memória fornecida pelo runtime.