Tipos de dispositivo (Direct3D 9)
Dispositivo HAL
O tipo de dispositivo primário é o dispositivo hal, que dá suporte à rasterização acelerada por hardware e ao processamento de vértice de hardware e software. Se o computador no qual seu aplicativo está em execução estiver equipado com um adaptador de exibição que dê suporte ao Direct3D, seu aplicativo deverá usá-lo para operações do Direct3D. Os dispositivos de hal do Direct3D implementam todos ou parte dos módulos de transformação, iluminação e rasterização no hardware.
Os aplicativos não acessam diretamente os adaptadores gráficos. Eles chamam funções e métodos Direct3D. O Direct3D acessa o hardware por meio do hal. Se o computador no qual seu aplicativo está sendo executado for compatível com o hal, ele obterá o melhor desempenho usando um dispositivo hal.
Para criar um dispositivo hal, chame CreateDevice usando D3DDEVTYPE_HAL como o tipo de dispositivo.
Dispositivo de referência
O Direct3D dá suporte a um tipo de dispositivo adicional chamado de dispositivo de referência ou rasterizador de referência. Ao contrário de um dispositivo de software, o rasterizador de referência dá suporte a todos os recursos do Direct3D. Esse dispositivo destina-se a ser usado para fins de depuração e, portanto, só está disponível em computadores em que o SDK do DirectX foi instalado. Como esses recursos são implementados para precisão em vez de velocidade e são implementados no software, os resultados não são muito rápidos. O rasterizador de referência usa instruções especiais de CPU sempre que pode, mas não se destina a aplicativos de varejo. Use o rasterizador de referência somente para fins de demonstração ou teste de recursos. Para criar um dispositivo de referência, chame método createDevice usando D3DDEVTYPE_REF como o tipo de dispositivo.
Dispositivos HAL vs. REF
Dispositivos HAL (Camada de Abstração de Hardware) e dispositivos REF (rasterizador REFerence) são os dois principais tipos de dispositivo Direct3D; o primeiro é baseado no suporte de hardware e é muito rápido, mas pode não dar suporte a tudo; enquanto o segundo não usa nenhuma aceleração de hardware, portanto, é muito lento, mas é garantido que dá suporte a todo o conjunto de recursos do Direct3D, da maneira correta. Em geral, você só precisará usar dispositivos HAL, mas se você estiver usando algum recurso avançado que sua placa gráfica não dá suporte, talvez seja necessário voltar ao REF.
A outra vez que você pode querer usar REF é se o dispositivo HAL está produzindo resultados estranhos - ou seja, você tem certeza de que seu código está correto, mas o resultado não é o que você está esperando. O dispositivo REF tem a garantia de se comportar corretamente, portanto, talvez você queira testar seu aplicativo no dispositivo REF e ver se o comportamento estranho continua. Caso contrário, significa que (a) seu aplicativo está assumindo que a placa gráfica dá suporte a algo que não dá, ou (b) é um bug de driver. Se ele ainda não funcionar com o dispositivo REF, será um bug do aplicativo.
Hardware vs. Processamento de vértice de software
O processamento de vértice de hardware versus software só se aplica realmente a dispositivos HAL. Quando você envia vértices por push pelo pipeline, eles precisam ser transformados (pelo mundo, visualização e matrizes de projeção por sua vez) e acesos (pelas luzes internas da D3D) - esse estágio de processamento é conhecido como T&L (para Transformação & Iluminação). O processamento de vértice de hardware significa que isso é feito em hardware, se o hardware der suporte a ele; ergo, o processamento de vértice de software é feito é software. A prática geral é tentar criar um dispositivo T de Hardware&L primeiro e, se isso falhar, tente o Mixed e, se isso falhar, tente Software. (Se o software falhar, desista e saia com um erro).
Tópicos relacionados