Compartilhar via


APIs gráficas no Windows

O Windows Vista inclui suporte para um modelo de driver de vídeo totalmente novo que representa uma revisão importante no design de drivers de vídeo desde a introdução do Modelo de Driver do Windows (WDM) para Windows 98. Esse modelo reprojetado reflete a evolução do hardware de vídeo do mundo das operações de varredura 2D e aplicativos GDI para o de jogos 3D com hardware gráfico de funções fixas e, por fim, o da gpu (unidade de processamento gráfico) programável moderna que dá suporte a uma ampla gama de aplicativos gráficos de alto desempenho. O Windows 7 e o Windows 8 se baseiam na infraestrutura gráfica do Windows Vista fornecendo recursos gráficos e APIs adicionais. Este artigo aborda os recursos gráficos e APIs do Windows.

Tela de fundo

A API principal para programação de gráficos desde os primeiros dias do Windows tem sido a GDI (Interface Gráfica do Dispositivo). Essa API foi projetada para lidar com vários dispositivos de saída 2D e formou a base para a experiência de interface do usuário do Windows. O DirectDraw e o Direct3D foram introduzidos como APIs alternativas para dar suporte a jogos de tela inteira e renderização 3D como extensões para o hardware existente da época. As interações com a GDI foram complicadas. A intermixação efetiva de elementos GDI tradicionais com elementos Direct3D foi limitada por esse design. A versão do Windows XP do WDM, conhecida como XPDM, reflete a natureza lado a lado de GDI e Direct3D (consulte a Figura 1).

Figura 1. APIs gráficas no Windows XP

Xpdm

Ao longo dos anos, o poder das placas de vídeo 3D cresceu drasticamente até o ponto em que a grande maioria do hardware é dedicada a essa função. Um novo modelo de driver, o WDDM (Windows Display Driver Model), traz a GPU e o Direct3D à vanguarda, permitindo a criação de uma experiência totalmente nova, a área de trabalho 3D, que combina perfeitamente o mundo 2D da GDI com o poder das GPUs programáveis modernas. Com o WDDM, o hardware de vídeo é totalmente controlado pelo Direct3D e todas as outras interfaces gráficas se comunicam com o hardware de vídeo por meio do novo modelo de driver centrado em Direct3D (consulte a Figura 2).

Figura 2. APIs gráficas no Windows Vista

Wddm

Para obter mais informações sobre o WDDM, consulte Guia de design do WDDM (Modelo de Driver de Exibição) do Windows Vista no MSDN.

Direct3D 9

A versão 9 do DirectX foi lançada pela primeira vez para Windows em 2002, com atualizações subsequentes em 2003 e 2004. Essa API representa uma década de evolução das tecnologias DirectX, a introdução de modelos de programação de sombreador mais poderosos para Direct3D e uma maturidade apoiada por milhares de títulos de envio. O Direct3D 9 é a interface gráfica principal no Windows Vista. Ela continua sendo a API ideal a ser usada para escrever jogos e aplicativos 3D que precisam ser executados na ampla gama de versões existentes do Hardware e do Windows. Os detalhes do novo modelo de driver estão ocultos de aplicativos que usam as interfaces direct3D 9, mas nos bastidores o sistema operacional está aproveitando ao máximo os novos recursos para fornecer multitarefa verdadeira da GPU, gerenciamento de recursos mais eficiente e desempenho robusto.

Para garantir a compatibilidade total com versões mais antigas do Windows, algumas peculiaridades do modelo de driver antigo devem ser emuladas mesmo com o novo modelo de driver de vídeo do Windows Vista. Por exemplo, quando um aplicativo de tela inteira perde o foco, ele deve assumir que perdeu todos os recursos na memória de vídeo (VRAM) e recarregar aqueles criados como recursos não gerenciados, embora o novo modelo de driver manipule os recursos de forma transparente sem expulsá-los do contexto do dispositivo. Até mesmo o conceito de um tipo de recurso gerenciado versus padrão é específico para o modelo de driver antigo. Outro exemplo é a expectativa de falha ao alocar recursos não gerenciados (pool padrão) além da quantidade de VRAM disponível, embora o novo modelo de driver possa fornecer uma quantidade quase ilimitada de memória de vídeo virtual. Devido a esses requisitos, os aplicativos Direct3D em execução no Windows Vista ainda receberão essas condições de erro. Portanto, eles são limitados em sua capacidade de usar as interfaces básicas do Direct3D 9 para usar totalmente alguns recursos do novo modelo de driver.

Embora novos sistemas que são enviados com o Windows Vista incluam placas de vídeo com drivers WDDM e novos drivers para uma série de placas de vídeo populares estão incluídos na caixa, o Windows Vista continua a dar suporte à capacidade de usar drivers XPDM mais antigos para atualizações e edições corporativas. Em sistemas que usam o modelo de driver antigo, o Direct3D 9 e as interfaces mais antigas devem ser usados e a operação do sistema gráfico é muito semelhante à do Windows XP (Figura 1). O WDDM é necessário para que os aplicativos usem Direct3D 9Ex, Direct3D 10 e versões posteriores.

Direct3D 9Ex

A interface Direct3D 9Ex fornece acesso a uma pequena extensão da API do Direct3D 9 padrão que expõe a alocação de recursos virtualizados, a nova semântica de dispositivo perdida e alguns outros novos recursos disponíveis durante a execução no Windows Vista. Ao criar esse objeto estendido, a API do Direct3D 9 usa a nova semântica e, portanto, requer que o aplicativo use uma lógica diferente (e, portanto, caminhos de código diferentes) para criação, gerenciamento e tratamento de erros para novos tipos de condições. Essa API só está disponível no Windows Vista e requer drivers WDDM. Como o Direct3D 9Ex usa uma API e um caminho de código de driver separados do Direct3D 9, dar suporte a essa API requer casos de teste adicionais para seu aplicativo.

O principal motivo para criar a nova API direct3D 9Ex foi permitir o acesso completo aos novos recursos do WDDM, mantendo a compatibilidade para aplicativos Direct3D existentes. A nova área de trabalho 3D e muitos aplicativos específicos do Windows Vista usam essa versão do Direct3D 9, mas não são funcionais durante a execução em drivers XPDM mais antigos. Como a API do Direct3D 9Ex nunca aparecerá em versões mais antigas do Windows devido à falta de suporte para o WDDM, as interfaces direct3D 9 padrão abrangem um conjunto muito mais amplo de sistemas. Para aplicativos de alto desempenho que podem aproveitar a próxima geração de hardware de vídeo, a nova versão 10 do Direct3D fornece muitos novos recursos não expostos pelo Direct3D 9Ex. Como resultado, para jogos e a maioria dos outros aplicativos, Direct3D 9 ou Direct3D 10 é a API recomendada.

Observação

O SDK do DirectX não fornece exemplos, cabeçalhos ou bibliotecas para a interface Direct3D 9Ex. O Biblioteca MSDN e o SDK do Windows (anteriormente conhecido como SDK da Plataforma) contêm a documentação, cabeçalhos e bibliotecas disponíveis.

 

Para obter mais informações sobre o Direct3D 9Ex, consulte DirectX para Windows Vista no MDSN.

Direct3D 10

Para perceber totalmente o potencial do novo modelo de driver do Windows Vista e do hardware de última geração, uma versão totalmente nova da API do Direct3D foi criada. Embora o WDDM elimine algumas das limitações no desempenho no sistema gráfico existente, o Direct3D 10 vai além removendo gargalos de design na API direct3D existente e simplifica muito a tarefa de programar a GPU.

A nova API elimina completamente todos, exceto alguns aspectos de função fixa, substituindo-os por constructos programáveis e simplificando consideravelmente a implementação interna. As centenas de bits de funcionalidade em versões anteriores do Direct3D foram completamente eliminadas e substituídas por um conjunto de funcionalidades bem definido e inclusivo que tem apenas alguns cenários de uso opcionais para formatos de recursos específicos. A criação e a validação de recursos com uso intensivo de CPU agora têm semântica explícita na nova API. Isso permite um comportamento de desempenho muito mais previsível e uma sobrecarga consideravelmente reduzida por desenho. Os recursos podem ser reconfigurados em várias formas para permitir o uso eficiente em vários estágios, e o conjunto de recursos impõe muito menos restrições em cenários de uso para formatos. Também há novos formatos de textura de mapa normal compactados em bloco.

Na nova API, as constantes de sombreador e o estado do dispositivo são recursos explícitos, permitindo um cache muito mais eficiente no hardware e validação de driver bastante simplificada. O modelo de sombreador programável foi unificado entre sombreadores de vértice e pixel e tornou-se mais expressivo com um modelo computacional bem definido e um conjunto de operadores. Além disso, um novo estágio de sombreador de geometria foi adicionado para operar em primitivos após o estágio do sombreador de vértice. Os resultados do trabalho da GPU nos estágios do sombreador de vértice e geometria do pipeline podem ser transmitidos para a RAM de vídeo para reutilização, permitindo a possibilidade de operações de GPU de várias passões extremamente complexas com interação mínima da CPU.

Todos esses aprimoramentos permitem a tecnologia de elementos gráficos de última geração e expandem a capacidade dos aplicativos de remover a carga de trabalho para a GPU. O descarregamento permite um esfolamento de caracteres baseado em GPU mais complexo, técnicas de transformação acelerada, geração e extrusão de volume de sombra, sistemas de partículas e físicas totalmente baseados em GPU, materiais mais complexos combinados em lotes eficientes de desenho grande, detalhes processuais, mapeamento de deslocamento rastreado por raios em tempo real, geração de mapa de cubo de passagem única e muitas outras técnicas, tudo isso liberando recursos de CPU para aplicativos mais complexos.

Para fornecer esse nível de inovação no Direct3D 10, o hardware mais antigo não pode ser expresso como uma implementação parcial de uma nova interface. Uma cartão de vídeo é capaz de dar suporte a todos os novos recursos ou não é uma cartão compatível com Direct3D 10. Portanto, embora o Direct3D 9 possa impulsionar o hardware da era DirectX7 com muitos bits de funcionalidade ausentes e limitações de uso, o Direct3D 10 só funciona em uma nova geração de placas de vídeo. Para que um aplicativo dê suporte a hardware de vídeo mais antigo, ele também deve dar suporte às interfaces do Direct3D 9. As versões futuras do Direct3D serão criadas na versão 10, estendendo-a para novas versões da API, garantindo um superconjunto estrito da funcionalidade do Direct3D 10.

Para obter mais informações sobre o Direct3D 10, consulte Direct3D 10.

Direct3D 10.1

O Windows Vista Service Pack 1 estende a API do Direct3D 10 com Direct3D 10.1, que adiciona interfaces opcionais e um modelo de sombreador adicional para dar suporte a novos recursos de hardware de placas de vídeo que dão suporte ao Direct3D 10.1. Todo o hardware capaz de dar suporte ao Direct3D 10.1 também dá suporte total a todos os recursos do Direct3D 10, e os desenvolvedores de jogos podem usar os recursos adicionais do Direct3D 10.1, quando disponíveis.

Observação

O Direct3D 10.1 é a API de gráficos usada pela área de trabalho do Windows 7.

 

Observação

O Windows 7 e a atualização do Windows Vista adicionam suporte para níveis de recurso DXGI 1.1, 10level9 e o dispositivo WARP10 à API existente do Direct3D 10.1.

 

Direct3D 11

O Windows 7 dá suporte a uma nova revisão do Direct3D, Direct3D 11, criada com base no design da API do Direct3D 10.1. Os novos recursos da API incluem renderização multithread e criação de recursos, Sombreador de Computação, suporte para níveis de recursos 10level9 e o dispositivo de renderização de software WARP10 e novos recursos de hardware da classe Direct3D 11, como mosaico usando sombreadores de domínio hull & , formatos de compactação de textura BC6H e BC7, Modelo de Sombreador 5.0 e Linkage de Sombreador Dinâmico. A nova API pode usar placas de vídeo de classe Direct3D 10 e 10.1 existentes, algumas placas Direct3D 9 por meio dos níveis de recursos 10level9 com suporte limitado a recursos e as placas de vídeo da classe Direct3D 11 de última geração.

Além da API do Direct3D 11, o Windows 7 inclui DXGI 1.1, Direct2D, DirectWrite e suporte para drivers WDDM 1.1.

Observação

O Direct3D 11 e as APIs relacionadas também estão disponíveis como uma atualização para o Windows Vista (consulte Como instalar a versão mais recente do DirectX).

 

Direct3D 11.1

Windows 8 estende a API do Direct3D 11 com Direct3D 11.1. O Direct3D 11.1 dá suporte a todos os hardwares existentes que apresentam os níveis 11, 10_x e 9_x suporte, bem como um novo nível de recurso 11_1.

Além da API direct3D 11.1, Windows 8 inclui DXGI 1.2, Direct2D contextos de dispositivo e suporte para drivers WDDM 1.2.

Observação

Se quiser que seus aplicativos da Windows Store programem elementos gráficos 3D com o DirectX, use a API direct3D 11.1. Para obter mais informações sobre como programar elementos gráficos 3D com DirectX, consulte Introdução a elementos gráficos 3D com DirectX.

 

Atualização de plataforma para Windows 7: O suporte parcial está disponível para a API do Direct3D 11.1 no Windows 7 ou Windows Server 2008 R2 com a Atualização de Plataforma para Windows 7 instalada. Para obter mais informações sobre a Atualização de Plataforma para Windows 7, consulte Atualização de plataforma para Windows 7.

Opengl

Windows Vista, Windows 7 e Windows 8 fornecem o mesmo suporte que o Windows XP para OpenGL, que permite que fabricantes de cartão de vídeo forneçam um ICD (driver de cliente) instalável para OpenGL que fornece suporte acelerado por hardware. Observe que as versões mais recentes desses ICDs são necessárias para dar suporte total ao Windows Vista, ao Windows 7 ou Windows 8. Se nenhuma ICD estiver instalada, o sistema retornará à camada de software OpenGL v1.1 na maioria dos casos.

Compatibilidade do aplicativo, GDI e versões mais antigas do Direct3D

Os sistemas gráficos Windows Vista, Windows 7 e Windows 8 foram projetados para dar suporte a uma ampla gama de cenários de hardware e uso para habilitar novas tecnologias e, ao mesmo tempo, dar suporte a sistemas existentes. As interfaces gráficas existentes, como GDI, GDI+e versões mais antigas do Direct3D, continuam funcionando no Windows Vista e no Windows 7, mas são remapeadas internamente sempre que possível. Isso significa que a maioria dos aplicativos existentes do Windows continuará funcionando.

Windows Vista, Windows 7 e Windows 8 continuam a dar suporte às mesmas interfaces Direct3D e DirectDraw que o Windows XP, de volta à versão 3 do DirectX (com exceção do Modo Retido do Direct3D, que foi removido). Assim como acontece com o Windows XP Professional x64 Edition, os aplicativos nativos de 64 bits em versões mais recentes do Windows são limitados a Direct3D9, DirectDraw7 ou interfaces mais recentes. Aplicativos de alto desempenho devem usar o Direct3D 9 ou posterior para garantir que eles tenham a correspondência mais próxima dos recursos de hardware.

Recomendações

Considere as seguintes recomendações ao selecionar uma API para seu aplicativo gráfico:

  • Use o Direct3D 9 se seu aplicativo precisar dar suporte ao Windows XP ou a uma versão anterior do Windows.
  • Use o Direct3D 9 se quiser dar suporte ao Windows Vista ou ao Windows 7 em execução com drivers XPDM. Para sistemas Windows Vista ou Windows 7 que não têm o Direct3D 10 ou um hardware de vídeo melhor, você pode optar por usar o caminho de código existente do Windows XP Direct3D 9 ou usar os níveis de recurso 10level9 por meio da API Direct3D 10.1 ou Direct3D 11.
  • Use o Direct3D 11 para aproveitar a próxima geração de hardware de vídeo no Windows Vista, windows 7 e Windows 8. Os aplicativos da Windows Store devem usar o Direct3D 11 ou posterior.