quinta-feira, 24 de março de 2016

A Torre de Babel das APIs


Assim como todos os programas são construídos usando alguma linguagem de programação, como o C++, Visual Basic, Delphi etc. que permitem ao programador construir a sua aplicação e aceder aos recursos do sistema, as aplicações 3D, em especial os jogos, são construídos através de uma interface de programação ou seja, uma API (Application Programming Interface).

Simplificando, uma API é mais ou menos como uma linguagem de programação para gerar gráficos 3D, composta de vários comandos que permitem ao programador construir as imagens, aplicar os efeitos 3D, e assim por diante. Todos os jogos são construídos com base nos recursos permitidos por uma das APIs disponíveis no mercado. Estão em uso actualmente, apenas três APIs em uso: Direct3D (ou “D3D”), OpenGL e Glide.

Direct3D: Desenvolvida pela Microsoft, o D3D é a API mais utilizada atualmente. Esta não é a API com mais recursos, nem a mais rápida, mas entre as três é a mais fácil de utilizar, motivo de sua fácil aceitação. De qualquer maneira, os recursos permitidos pelo D3D não são nada modestos, e permitem criar jogos com gráficos belíssimos.

Esta API pode ser utilizada por qualquer placa 3D, é preciso apenas que o fabricante desenvolva o driver adequado. Felizmente, existem drivers D3D para praticamente todas as placas 3D actuais, apesar de em algumas o desempenho ser melhor do que em outras, devido à sofisticação dos drivers.

Esta API está em constante desenvolvimento. Os novos recursos do D3D vão sendo incorporados às placas já existentes através de novos drivers (mais um motivo para você visitar periodicamente a página do fabricante da sua placa e baixar as novas versões) resultando em um aumento tanto da qualidade de imagem quanto de desempenho.

Na verdade, o Direct3D faz parte do DirectX da Microsoft, e por isso todos os jogos que rodam sobre esta API precisam que o DirectX esteja instalado na máquina. Na falta de uma aceleradora 3D, os jogos feitos em D3D (a menos que o desenvolvedor determine o contrário) podem ser executados em modo software, onde o processador sozinho faz todo o trabalho. Claro que rodando em modo software o desempenho será muito ruim, mesmo em baixas resoluções.

OpenGL: Se o D3D é a API mais fácil de utilizar, o OpenGL é a API que possui mais recursos. 

Originalmente, o OpenGL foi desenvolvido para ser utilizado em aplicações profissionais e, de facto, é praticamente a única API 3D utilizada em aplicativos como o 3D Studio MAX, programas de engenharia e outros aplicativos profissionais.

Os fabricantes de jogos logo perceberam que também poderiam usar esta poderosa ferramenta nos seus produtos. Um dos primeiros títulos foi o GL Quake, uma versão do Quake 1 modificada para utilizar efeitos 3D em OpenGL, que abriu o caminho para o lançamento de vários outros títulos.

Um dos principais problemas desta API é o facto de ser incompatível com um número considerável de placas de vídeo, não devido à limitações de hardware, mas simplesmente por falta de drivers.

Noutros casos, a placa de vídeo é compatível, mas os drivers são ruins, aproveitando apenas alguns dos recursos da API, resultando em baixa performance e baixa qualidade de imagem.

Os drivers OpenGL são chamados de drivers OpenGL ICD, ou “Installable Client Driver”. O termo ICD é usado em relação a um driver completo, que suporta todos os recursos OpenGL. Muitas vezes, os fabricantes lançam também mini-drivers, chamados de “mini-GL”, ou “mini-ICD” optimizadas para jogos. Estes drivers possuem apenas algumas das instruções OpenGL, justamente as utilizadas pelos jogos. Com menos instruções, fica mais fácil para os fabricantes melhorarem a performance do driver e incluírem suporte às instruções 3D-Now! e SSE, melhorando a performance dos drivers e consequentemente da placa. Claro que estes mini-drivers servem apenas para jogos; para rodar aplicativos profissionais, você precisará ter instalado do driver ICD completo.

Existem poucos títulos compatíveis apenas com o OpenGL. Na grande maioria dos casos, o jogo é compatível tanto com o OpenGL quanto com o D3D ou Glide e, em alguns casos, com as três. 

Nestes casos geralmente é possível escolher qual API será utilizada na janela de configuração do jogo.

Como o OpenGL também é compatível com o DirectX, muitos jogos podem ser executados em modo software na falta de uma placa 3D.

Glide: Entre as três, o Glide é a API mais antiga e ao mesmo tempo a mais simples. Foi desenvolvida pela 3dfx para ser usada em conjunto com seus chipsets Voodoo (usados na Monster 1, Monster 2, Voodoo 3, entre várias outras placas). O problema é que o Glide sempre foi uma API proprietária, e por isso compatível apenas com as placas com chipset 3dfx. Durante muito tempo, esta foi a API mais usada, pois na época (a uns 3 anos atrás) as placas com chipset Voodoo eram de longe as mais vendidas.

Conforme foram sendo lançadas placas 3D de outros fabricantes (que eram compatíveis apenas com D3D e OpenGL) os fabricantes de jogos foram pouco a pouco abandonando o uso do Glide, em nome da compatibilidade com o maior número de placas possíveis. De um ano para cá, não tivemos o lançamento de nenhum jogo compatível apenas com o Glide, tivemos alguns lançamentos interessantes que ainda utilizam o Glide, mas todos também rodam usando D3D ou OpenGL ou mesmo tem compatibilidade com ambos.

De qualquer maneira, mesmo entre os jogos mais actuais, existem casos de jogos que rodam bem melhor usando Glide do que usando outras APIs, e consequentemente apresentam uma qualidade ou velocidade maior em placas Voodoo. Um exemplo é o Unreal Torment, que é compatível com as três APIs, mas roda mais rápido em Glide.

Glide Wrappers: O Glide é uma API proprietária, suportada apenas pelas placas equipadas com chipsets de vídeo da 3dfx. Recentemente, o Glide passou a ser uma API aberta, mas até agora poucos fabricantes se interessaram por incluir suporte a Glide em sua placas. Mas, se por acaso chegar às suas mãos um jogo que suporte apenas o Glide, e você tiver uma Viper v550 por exemplo, nem tudo está perdido. Quase sempre, é possível rodar o jogo, mesmo que a sua placa não suporte Glide, usando um Wrapper.

Um Wrapper é um programa que funciona como uma espécie de emulador, convertendo os comandos Glide enviados pelo jogo para comandos D3D ou OpenGL que a placa possa executar.

Claro que existem algumas limitações: os Wrappers não funcionam com todos os jogos, a qualidade de imagem não é tão boa quanto numa placa com suporte nativo a Glide, e o desempenho não é dos melhores, pois como as instruções são bem diferentes, normalmente é preciso usar várias instruções D3D ou OpenGL para emular cada instrução Glide. De qualquer modo, é melhor que o jogo rode com algumas limitações do que simplesmente não rode, não concorda?

Dois bons Wrappers (ambos são gratuitos) são:
Hang Glide: (http://www.cs.colostate.edu/~zinkevic/programs.html)
XGI200: (http://www.paradux.com/~spcutler/xgl200/)

in Manual de Hardware Completo
de Carlos E Marimoto



Sem comentários: