Partilhar via


APIs gráficas no Windows

O Windows Vista inclui suporte para um modelo de driver de vídeo totalmente novo que representa uma grande revisão no design de drivers de vídeo desde a introdução do WDM (Windows Driver Model) para Windows 98. Este modelo redesenhado reflete a evolução do hardware de vídeo do mundo das operações de raster 2D e aplicações GDI para o de jogos 3D com hardware gráfico de função fixa e, finalmente, para o da moderna unidade de processamento gráfico programável (GPU) que suporta uma ampla gama de aplicações gráficas 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 discute recursos gráficos e APIs do Windows.

Contexto geral

A principal API para programação de gráficos desde os primórdios do Windows tem sido a Graphical Device Interface (GDI). 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. DirectDraw e Direct3D foram introduzidos como APIs alternativas para suportar jogos em tela cheia e renderização 3D como extensões para o hardware existente da época. As interações com o GDI foram complicadas. A mistura eficaz de elementos GDI tradicionais com elementos Direct3D foi limitada por este design. A versão Windows XP do WDM, conhecida como XPDM, reflete a natureza lado a lado do GDI e do 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 dramaticamente a ponto de a grande maioria do hardware ser dedicada a essa função. Um novo modelo de driver, o Windows Display Driver Model (WDDM), traz a GPU e o Direct3D para a vanguarda, permitindo a criação de uma experiência totalmente nova, o desktop 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 é conduzido inteiramente 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 Windows Vista Display Driver Model (WDDM) Design Guide.

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. Esta 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 para escrever jogos 3D e aplicativos que precisam ser executados na ampla gama de hardware existente e versões do Windows. Os detalhes do novo modelo de driver estão escondidos dos aplicativos que usam as interfaces Direct3D 9, mas nos bastidores o sistema operacional está aproveitando ao máximo os novos recursos para fornecer verdadeira multitarefa da GPU, gerenciamento de recursos mais eficiente e desempenho robusto.

Para garantir total compatibilidade 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 cheia perde o foco, ele deve assumir que perdeu todos os recursos na memória de vídeo (VRAM) e recarregar aqueles que criou como recursos não gerenciados, mesmo que o novo modelo de driver lide com 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) acima da quantidade de VRAM disponível, mesmo que 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. Assim, 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 os novos sistemas fornecidos com o Windows Vista incluam placas de vídeo com drivers WDDM e novos drivers para várias placas de vídeo populares estejam incluídos na caixa, o Windows Vista continua a oferecer 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 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 o Direct3D 9Ex, o Direct3D 10 e versões posteriores.

Direct3D 9Ex

A interface do Direct3D 9Ex fornece acesso a uma pequena extensão da API padrão do Direct3D 9 que expõe a alocação de recursos virtualizados, a nova semântica de dispositivo perdido 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, exige que o aplicativo use lógica diferente (e, portanto, caminhos de código diferentes) para criação, gerenciamento e tratamento de erros de recursos 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, o suporte a essa API requer casos de teste adicionais para seu aplicativo.

A principal razão para criar a nova API Direct3D 9Ex foi permitir acesso total 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 fazem uso desta versão do Direct3D 9, mas eles não são funcionais quando executados 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 padrão do Direct3D 9 abrangem um conjunto muito mais amplo de sistemas. Para aplicações de alto desempenho que podem tirar partido da próxima geração de hardware de vídeo, a versão 10 totalmente nova do Direct3D fornece muitas novas capacidades não expostas pelo Direct3D 9Ex. Como resultado, para jogos e a maioria dos outros aplicativos, o 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 do Direct3D 9Ex. Para obter mais informações sobre o Direct3D 9Ex, consulte DirectX para Windows Vista.

Direct3D 10

Para aproveitar plenamente o potencial do novo modelo de driver do Windows Vista e do hardware de próxima geração, uma versão totalmente nova da API do Direct3D foi criada. Enquanto o WDDM elimina algumas das limitações de desempenho no sistema gráfico existente, o Direct3D 10 vai além ao remover gargalos de design na API Direct3D existente e simplifica muito a tarefa de programação da GPU.

A nova API elimina completamente todos os aspetos, exceto alguns de função fixa, substituindo-os por construções programáveis e simplificando muito a implementação interna. As centenas de bits de capacidade 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 validação de recursos intensivos 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 por sorteio muito reduzida. Os recursos podem ser reconfigurados em vários formulários para permitir o uso eficiente em vários estágios, e o conjunto de recursos impõe muito menos restrições aos cenários de uso para formatos. Há também 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 uma validação de driver muito simplificada. O modelo de sombreador programável foi unificado em 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 de sombreador de vértice. Os resultados do trabalho da GPU nos estágios de sombreador de vértice e geometria do pipeline podem ser transmitidos para RAM de vídeo para reutilização, permitindo a possibilidade de operações de GPU multipassagem extremamente complexas com interação mínima da CPU.

Todas essas melhorias permitem a tecnologia gráfica de última geração e expandem a capacidade dos aplicativos de descarregar o trabalho para a GPU. O descarregamento permite 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ísica que são inteiramente baseados em GPU, materiais mais complexos combinados em lotes de grande desenho eficientes, detalhamento de procedimentos, 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 enquanto libera recursos da CPU para aplicações mais complexas.

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 placa de vídeo é capaz de suportar todos os novos recursos ou não é uma placa compatível com Direct3D 10. Portanto, enquanto o Direct3D 9 poderia conduzir hardware da era DirectX7 com muitos bits de capacidade 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 ofereça suporte a hardware de vídeo mais antigo, ele também deve suportar as interfaces Direct3D 9. As versões futuras do Direct3D serão baseadas na versão 10, estendendo-a a novas versões da API e 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 o Direct3D 10.1, que adiciona interfaces opcionais e um modelo de sombreador adicional para oferecer suporte a novos recursos de hardware de placas de vídeo que suportam Direct3D 10.1. Todo o hardware capaz de suportar o Direct3D 10.1 também suporta totalmente 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 gráfica usada pela área de trabalho do Windows 7.

 

Observação

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

 

Direct3D 11

O Windows 7 suporta uma nova revisão do Direct3D, o Direct3D 11, baseado no design da API do Direct3D 10.1. Os novos recursos da API incluem renderização multithreaded e criação de recursos, Compute Shader, suporte para níveis de recurso 10level9 e o dispositivo de renderização de software WARP10, e novos recursos de hardware de classe Direct3D 11, como tessellação usando sombreadores de casco & domínio, formatos de compressão de textura BC6H e BC7, Shader Model 5.0 e Dynamic Shader Linkage. A nova API pode usar placas de vídeo de classe Direct3D 10 e 10.1 existentes, algumas placas Direct3D 9 através dos níveis de recurso 10level9 com suporte limitado a recursos e as placas de vídeo de 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 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

O Windows 8 estende o API do Direct3D 11 com o Direct3D 11.1. O Direct3D 11.1 suporta todo o hardware existente que níveis de funcionalidade 11, 10_x e suporte 9_x, bem como um novo nível de funcionalidade 11_1.

Além do de API do Direct3D 11.1, o Windows 8 inclui DXGI 1.2, contextos de dispositivo Direct2De suporte para drivers WDDM 1.2.

Observação

Se pretender que as suas aplicações da Loja Windows programem gráficos 3D com DirectX, pode utilizar a API do Direct3D 11.1. Para obter mais informações sobre como programar gráficos 3D com DirectX, consulte Introdução aos gráficos 3D com DirectX.

 

Atualização da plataforma para Windows 7: suporte parcial está disponível para o da API do Direct3D 11.1 no Windows 7 ou Windows Server 2008 R2 com a Atualização da 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

O Windows Vista, o Windows 7 e o Windows 8 oferecem o mesmo suporte que o Windows XP para OpenGL, que permite que os fabricantes de placas de vídeo forneçam um driver de cliente instalável (ICD) para OpenGL que fornece suporte acelerado por hardware. Observe que as versões mais recentes desses ICDs são necessárias para oferecer suporte total ao Windows Vista, Windows 7 ou Windows 8. Se nenhum ICD estiver instalado, o sistema voltará para a camada de software OpenGL v1.1 na maioria dos casos.

Compatibilidade de aplicativos, GDI e versões mais antigas do Direct3D

Os sistemas gráficos Windows Vista, Windows 7 e Windows 8 foram projetados para oferecer suporte a uma ampla gama de cenários de hardware e uso para habilitar novas tecnologias e, ao mesmo tempo, continuar a oferecer suporte aos sistemas existentes. As interfaces gráficas existentes, como GDI, GDI+ e versões mais antigas do Direct3D, continuam a funcionar 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á a funcionar.

O Windows Vista, o Windows 7 e o Windows 8 continuam a suportar as 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). Tal como acontece com o Windows XP Professional x64 Edition, as aplicações nativas de 64 bits em versões mais recentes do Windows estão limitadas a interfaces Direct3D9, DirectDraw7 ou mais recentes. Os 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:

  • Utilize o Direct3D 9 se a sua aplicação tiver de suportar o Windows XP ou uma versão anterior do Windows.
  • Use o Direct3D 9 se quiser oferecer suporte ao Windows Vista ou Windows 7 em execução com drivers XPDM. Para sistemas Windows Vista ou Windows 7 que não possuem hardware de vídeo Direct3D 10 ou superior, 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 do Direct3D 10.1 ou Direct3D 11.
  • Utilize o Direct3D 11 para tirar partido da próxima geração de hardware de vídeo no Windows Vista, Windows 7 e Windows 8. As aplicações da Loja Windows têm de utilizar o Direct3D 11 ou posterior.