Por que os desenvolvedores de jogos preferem o Windows?


396

O DirectX é mais fácil ou melhor que o OpenGL, mesmo que o OpenGL seja multiplataforma? Por que não vemos jogos realmente poderosos para Linux como existem para Windows?


55
Falsa premissa - onde estão as evidências de que os desenvolvedores de jogos preferem o Windows? Acho @ user17674 tinha mais precisamente - eles querem desenvolver para plataformas para que eles possam vender mais e ganhar mais dinheiro :-)
Rory Alsop

258
Os desenvolvedores de vírus também preferem o Windows. É tudo sobre a base de usuários.
CesarGon

4
Por que os programadores do Windows preferem o DirectX ao OpenGL é provavelmente uma questão mais interessante historicamente. Como o link para a entrevista de Carmack abaixo pode indicar, o DX costumava ser odiado. Seria interessante saber como ele mantinha usuários suficientes para a MS suportá-lo até que o Xbox e as reescritas modernas o tornassem mais popular. Ou talvez fosse sempre bom o suficiente para que as pessoas continuassem com isso.
CodexArcanum 22/03

100
Por que as pessoas roubam bancos? Porque é onde está o dinheiro .
GrandmasterB

7
@ CesarGon: Não é apenas por causa da base de usuários, mas também pela facilidade de desenvolvimento.
Giorgio

Respostas:


1154

Muitas das respostas aqui são muito, muito boas. Mas o problema do OpenGL e Direct3D (D3D) provavelmente deve ser resolvido. E isso requer ... uma lição de história.

E antes de começarmos, eu sei muito mais sobre o OpenGL do que sobre o Direct3D . Eu nunca escrevi uma linha de código D3D na minha vida e escrevi tutoriais sobre o OpenGL. Então, o que estou prestes a dizer não é uma questão de viés. É simplesmente uma questão de história.

Nascimento de Conflito

Um dia, no início dos anos 90, a Microsoft olhou em volta. Eles viram o SNES e o Sega Genesis serem incríveis, rodando muitos jogos de ação e coisas do gênero . E eles viram o DOS . Os desenvolvedores codificaram jogos do DOS como jogos de console: direto ao metal. Ao contrário dos consoles, no entanto, onde um desenvolvedor que criou um jogo SNES sabia qual hardware o usuário teria, os desenvolvedores do DOS precisavam escrever para várias configurações possíveis. E isso é mais difícil do que parece.

E a Microsoft tinha um problema maior: o Windows. Veja, o Windows queria possuir o hardware, ao contrário do DOS, que praticamente permite que os desenvolvedores façam o que quer. É necessário possuir o hardware para ter cooperação entre aplicativos. Cooperação é exatamente o que os desenvolvedores de jogos detestam, pois consome recursos preciosos de hardware que eles poderiam estar usando para serem incríveis.

Para promover o desenvolvimento de jogos no Windows, a Microsoft precisava de uma API uniforme, de baixo nível, executada no Windows sem ser desacelerada por ela e, acima de tudo, entre hardwares . Uma única API para todos os gráficos, som e hardware de entrada.

Assim, o DirectX nasceu.

Os aceleradores 3D nasceram alguns meses depois. E a Microsoft teve um problema. Veja, o DirectDraw, o componente gráfico do DirectX, lidava apenas com gráficos 2D: alocando memória gráfica e fazendo bit-blits entre diferentes seções alocadas da memória.

Por isso, a Microsoft comprou um pouco de middleware e transformou-o no Direct3D versão 3. Ele foi universalmente criticado. E com boas razões; olhar para o código D3D v3 é como olhar para a Arca da Aliança.

O velho John Carmack, da Id Software, deu uma olhada no lixo e disse: "Dane-se!" e decidiu escrever para outra API: OpenGL.

Veja, outra parte da besta de muitas cabeças da Microsoft estava ocupada trabalhando com a SGI em uma implementação OpenGL para Windows. A idéia aqui era julgar os desenvolvedores de aplicativos GL típicos: aplicativos de estação de trabalho. Ferramentas de CAD, modelagem, esse tipo de coisa. Jogos eram a coisa mais distante em sua mente. Isso era basicamente uma coisa do Windows NT, mas a Microsoft decidiu adicioná-lo ao Win95 também.

Como forma de atrair desenvolvedores de estações de trabalho para o Windows, a Microsoft decidiu tentar suborná-los com acesso a essas novas placas gráficas 3D. A Microsoft implementou o protocolo Installable Client Driver: um fabricante de placa de vídeo pode substituir a implementação do software OpenGL da Microsoft por uma baseada em hardware. O código poderia usar automaticamente apenas uma implementação OpenGL de hardware, se estivesse disponível.

No início, os videocards no nível do consumidor não tinham suporte para o OpenGL. Isso não impediu Carmack de apenas portar o Quake para o OpenGL (GLQuake) em sua estação de trabalho SGI. Como podemos ler no leia-me do GLQuake:

Teoricamente, o glquake será executado em qualquer OpenGL compatível que ofereça suporte às extensões de objetos de textura, mas, a menos que seja um hardware muito poderoso que acelere tudo o necessário, o jogo não será aceitável. Se precisar passar por qualquer caminho de emulação de software, o desempenho provavelmente ficará abaixo de um quadro por segundo.

No momento (março de 97), o único hardware opengl padrão capaz de reproduzir glquake razoavelmente é um realizador intergraph, que é um cartão MUITO caro. O 3dlabs vem melhorando significativamente seu desempenho, mas com os drivers disponíveis ainda não é bom o suficiente para jogar. Alguns dos drivers 3dlabs atuais para placas de brilho e permedia também podem travar o NT ao sair de uma execução em tela cheia, por isso não recomendo executar o glquake no hardware da 3dlabs.

O 3dfx forneceu um opengl32.dll que implementa tudo o que o glquake precisa, mas não é uma implementação opengl completa. É improvável que outras aplicações opengl funcionem com ela, portanto, considere-a basicamente um "driver para glquake".

Este foi o nascimento dos drivers miniGL. Eles evoluíram para implementações completas do OpenGL eventualmente, à medida que o hardware se tornou poderoso o suficiente para implementar a maioria das funcionalidades do OpenGL no hardware. A nVidia foi a primeira a oferecer uma implementação completa do OpenGL. Muitos outros fornecedores enfrentaram dificuldades, e essa é uma das razões pelas quais os desenvolvedores preferem o Direct3D: eles são compatíveis com uma ampla gama de hardware. Eventualmente, apenas a nVidia e a ATI (agora AMD) permaneceram, e ambas tiveram uma boa implementação do OpenGL.

OpenGL Ascendant

Assim, o cenário está montado: Direct3D vs. OpenGL. É realmente uma história incrível, considerando o quão ruim o D3D v3 foi.

O OpenGL Architectural Review Board (ARB) é a organização responsável pela manutenção do OpenGL. Eles emitem várias extensões, mantêm o repositório de extensões e criam novas versões da API. O ARB é um comitê formado por muitos dos participantes da indústria gráfica, além de alguns fabricantes de sistemas operacionais. A Apple e a Microsoft foram em vários momentos um membro do ARB.

O 3Dfx é lançado com o Voodoo2. Este é o primeiro hardware que pode executar multi-extensões, algo que o OpenGL não podia fazer antes. Embora o 3Dfx fosse fortemente contra o OpenGL, a NVIDIA, fabricante do próximo chip gráfico de várias estruturas (o TNT1), adorou. Portanto, o ARB emitiu uma extensão: GL_ARB_multitexture, que permitiria o acesso à multitexturing.

Enquanto isso, o Direct3D v5 sai. Agora, o D3D se tornou uma API real , em vez de algo que um gato pode vomitar. O problema? Sem multi-extensão.

Opa

Agora, isso não machucaria tanto quanto deveria, porque as pessoas não usavam muito a multi-extensão. Não diretamente. A multi-extensão prejudicou bastante o desempenho e, em muitos casos, não valeu a pena em comparação com a passagem múltipla. E, é claro, os desenvolvedores de jogos adoram garantir que seus jogos funcionem em hardware mais antigo, que não possuía múltiplas estruturas, tantos jogos enviados sem ele.

D3D, portanto, recebeu uma suspensão.

O tempo passa e a NVIDIA implementa a GeForce 256 (não a GeForce GT-250; a primeira GeForce), acabando com a competição em placas gráficas pelos próximos dois anos. O principal ponto de venda é a capacidade de realizar transformações e iluminação de vértices (T&L) em hardware. Além disso, a NVIDIA amava tanto o OpenGL que seu mecanismo de T&L era efetivamente o OpenGL. Quase literalmente; pelo que entendi, alguns de seus registradores realmente consideraram os enumeradores do OpenGL diretamente como valores.

O Direct3D v6 é lançado. Por fim, com várias estruturas, mas ... sem T&L de hardware. O OpenGL sempre teve um pipeline de T&L, embora antes dos 256 ele fosse implementado em software. Por isso, foi muito fácil para a NVIDIA converter sua implementação de software em uma solução de hardware. Não seria até o D3D v7 até que o D3D finalmente tivesse suporte a T&L de hardware.

Amanhecer dos Shaders, Crepúsculo do OpenGL

Então, o GeForce 3 foi lançado. E muitas coisas aconteceram ao mesmo tempo.

A Microsoft decidiu que não se atrasariam novamente. Então, em vez de olhar para o que a NVIDIA estava fazendo e depois copiá-lo após o fato, eles assumiram a posição surpreendente de ir até eles e conversar com eles. E então eles se apaixonaram e tiveram um pequeno console juntos.

Um divórcio confuso se seguiu mais tarde. Mas isso é para outra hora.

O que isso significava para o PC era que o GeForce 3 saiu simultaneamente com o D3D v8. E não é difícil ver como o GeForce 3 influenciou os shaders do D3D 8. Os shaders de pixel do Shader Model 1.0 eram extremamente específicos para o hardware da NVIDIA. Não houve nenhuma tentativa de abstrair o hardware da NVIDIA; O SM 1.0 foi exatamente o que a GeForce 3 fez.

Quando a ATI começou a entrar na corrida de placas gráficas de desempenho com a Radeon 8500, houve um problema. O pipeline de processamento de pixels do 8500 era mais poderoso do que o material da NVIDIA. Então a Microsoft lançou o Shader Model 1.1, que basicamente era "O que o 8500 faz".

Isso pode parecer uma falha da parte do D3D. Mas fracasso e sucesso são questões de graus. E um fracasso épico estava acontecendo na terra do OpenGL.

A NVIDIA amava o OpenGL, então, quando a GeForce 3 chegou, eles lançaram uma série de extensões OpenGL. Extensões proprietárias OpenGL: somente NVIDIA. Naturalmente, quando o 8500 apareceu, ele não podia usar nenhum deles.

Veja, pelo menos no D3D 8 land, você pode executar seus shaders SM 1.0 no hardware da ATI. Claro, você tinha que escrever novos shaders para tirar proveito do frescor do 8500, mas pelo menos seu código funcionava .

Para ter sombreadores de qualquer tipo no Radeon 8500 no OpenGL, a ATI precisou escrever várias extensões do OpenGL. Extensões OpenGL proprietárias : somente ATI. Então, você precisava de um caminho de código da NVIDIA e de ATI, apenas para ter sombreadores .

Agora, você pode perguntar: "Onde estava o OpenGL ARB, cujo trabalho era manter o OpenGL atualizado?" Onde muitas comissões frequentemente acabam: sendo estúpidas.

Veja, eu mencionei ARB_multitexture acima porque isso influencia profundamente tudo isso. O ARB parecia (do ponto de vista de alguém de fora) querer evitar completamente a idéia de shaders. Eles concluíram que, se colocassem configurabilidade suficiente no pipeline de função fixa, poderiam igualar a capacidade de um pipeline de shader.

Então o ARB lançou extensão após extensão. Cada extensão com as palavras "texture_env" continha mais uma tentativa de corrigir esse design antigo. Verifique o registro: entre as extensões ARB e EXT, foram feitas oito dessas extensões. Muitos foram promovidos para as versões principais do OpenGL.

A Microsoft fazia parte do ARB naquele momento; eles saíram na época em que o D3D 9 foi atingido. Portanto, é perfeitamente possível que eles estivessem trabalhando para sabotar o OpenGL de alguma forma. Pessoalmente, duvido dessa teoria por dois motivos. Primeiro, eles precisariam obter ajuda de outros membros da ARB para fazer isso, já que cada membro recebe apenas um voto. E o mais importante: o ARB não precisava da ajuda da Microsoft para estragar tudo. Veremos mais evidências disso.

Eventualmente, o ARB, provavelmente sob ameaça da ATI e da NVIDIA (ambos os membros ativos), acabou puxando a cabeça por tempo suficiente para fornecer shaders reais no estilo de montagem.

Quer algo ainda mais estúpido?

Termos e condições de hardware. Algo que o OpenGL teve primeiro . Bem, é interessante. Para obter o máximo desempenho possível dos T&L de hardware, você precisa armazenar seus dados de vértice na GPU. Afinal, é a GPU que realmente deseja usar seus dados de vértice.

No D3D v7, a Microsoft introduziu o conceito de Vertex Buffers. Essas são faixas alocadas de memória da GPU para armazenar dados de vértice.

Quer saber quando o OpenGL conseguiu o equivalente disso? Ah, a NVIDIA, sendo uma amante de tudo o que o OpenGL (desde que sejam extensões proprietárias da NVIDIA), lançou a extensão do alcance da matriz de vértices quando a GeForce 256 foi lançada pela primeira vez. Mas quando o ARB decidiu fornecer funcionalidade semelhante?

Dois anos depois . Isso foi depois que eles aprovaram sombreadores de vértice e fragmento (pixel na linguagem D3D). Foi esse o tempo que o ARB levou para desenvolver uma solução de plataforma cruzada para armazenar dados de vértices na memória da GPU. Novamente, algo que os T&L de hardware precisam para atingir o desempenho máximo.

Um idioma para estragá-los todos

Portanto, o ambiente de desenvolvimento do OpenGL foi quebrado por um tempo. Sem shaders de hardware cruzado, sem armazenamento de vértice de GPU de hardware cruzado, enquanto os usuários do D3D desfrutavam de ambos. Poderia piorar?

Você ... você poderia dizer isso. Entre no 3D Labs .

Quem são eles, você pode perguntar? Eles são uma empresa extinta que considero os verdadeiros assassinos do OpenGL. Certamente, a inaptidão geral do ARB tornou o OpenGL vulnerável quando deveria ter o D3D. Mas o 3D Labs é talvez o maior motivo para o estado atual do mercado do OpenGL. O que eles poderiam ter feito para causar isso?

Eles projetaram a OpenGL Shading Language.

Veja, 3D Labs era uma empresa moribunda. Suas GPUs caras estavam sendo marginalizadas pela crescente pressão da NVIDIA no mercado de estações de trabalho. E, diferentemente da NVIDIA, o 3D Labs não tinha presença no mercado convencional; se a NVIDIA vencesse, eles morreriam.

O que eles fizeram.

Portanto, em uma tentativa de permanecer relevante em um mundo que não queria seus produtos, o 3D Labs apareceu em uma Game Developer Conference exibindo apresentações para algo que chamou de "OpenGL 2.0". Isso seria uma reescrita completa e completa da API do OpenGL. E isso faz sentido; havia muito cruft na API do OpenGL na época (nota: esse cruft ainda existe). Veja como o carregamento e a ligação de textura funcionam; é semi-arcano.

Parte de sua proposta era uma linguagem de sombreamento. Naturalmente. No entanto, diferentemente das extensões ARB atuais de plataforma cruzada, o idioma de sombreamento era "alto nível" (C é de alto nível para um idioma de sombreamento. Sim, na verdade).

Agora, a Microsoft estava trabalhando em sua própria linguagem de sombreamento de alto nível. Que eles, em toda a imaginação coletiva da Microsoft, chamaram ... de linguagem de sombreamento de alto nível (HLSL). Mas a abordagem deles era fundamentalmente diferente para os idiomas.

O maior problema com a linguagem de sombreamento do 3D Labs foi que ele estava embutido. Veja, HLSL era um idioma definido pela Microsoft. Eles lançaram um compilador para ele e ele gerou o código de montagem do Shader Model 2.0 (ou modelos de shader posteriores), que você alimentaria no D3D. Nos dias do D3D v9, o HLSL nunca foi tocado diretamente pelo D3D. Foi uma boa abstração, mas era puramente opcional. E um desenvolvedor sempre teve a oportunidade de ir atrás do compilador e ajustar a saída para obter o desempenho máximo.

A linguagem do 3D Labs não tinha nada disso. Você deu ao motorista a linguagem C, e ela produziu um sombreador. Fim da história. Não é um shader de montagem, não é algo que você alimenta outra coisa. O objeto OpenGL real que representa um shader.

O que isso significava é que os usuários do OpenGL estavam abertos aos caprichos dos desenvolvedores que estavam apenas aprendendo a compilar linguagens do tipo assembly. Os erros do compilador eram comuns no recém-batizado OpenGL Shading Language (GLSL). O que é pior: se você conseguiu que um shader compilasse corretamente em várias plataformas (sem façanha), você ainda estava sujeito aos otimizadores do dia. Que não eram tão ótimos quanto poderiam ser.

Embora essa fosse a maior falha no GLSL, não era a única falha. De longe .

No D3D e nas linguagens assembly mais antigas do OpenGL, era possível misturar e combinar sombreadores de vértice e fragmento (pixel). Desde que eles se comuniquem com a mesma interface, você poderá usar qualquer shader de vértice com qualquer shader de fragmento compatível. E havia até níveis de incompatibilidade que eles podiam aceitar; um shader de vértice pode escrever uma saída que o shader de fragmento não leu. E assim por diante.

GLSL não tinha nada disso. Os vértices e os shaders de fragmentos foram fundidos no que o 3D Labs chamou de "objeto de programa". Portanto, se você quiser compartilhar programas de vértice e fragmento, precisará criar vários objetos de programa. E isso causou o segundo maior problema.

Veja, o 3D Labs achou que estavam sendo espertos. Eles basearam o modelo de compilação do GLSL em C / C ++. Você pega um .c ou .cpp e o compila em um arquivo de objeto. Então você pega um ou mais arquivos de objeto e os vincula a um programa. É assim que o GLSL compila: você compila seu shader (vértice ou fragmento) em um objeto shader. Em seguida, você coloca esses objetos de sombreamento em um objeto de programa e os vincula para formar seu programa real.

Embora isso tenha permitido idéias interessantes em potencial, como ter shaders de "biblioteca" que continham código extra que os shaders principais poderiam chamar, o que na prática significava que os shaders eram compilados duas vezes . Uma vez no estágio de compilação e no estágio de vinculação. O compilador da NVIDIA, em particular, era conhecido por basicamente executar a compilação duas vezes. Não gerou algum tipo de código de objeto intermediário; apenas o compilou uma vez e jogou fora a resposta, depois a compilou novamente no momento do link.

Portanto, mesmo se você quiser vincular seu shader de vértice a dois shaders de fragmento diferentes, precisará compilar muito mais do que no D3D. Especialmente porque a compilação de uma linguagem do tipo C foi feita offline , não no início da execução do programa.

Houve outros problemas com o GLSL. Talvez pareça errado culpar o 3D Labs, já que o ARB finalmente aprovou e incorporou o idioma (mas nada mais da iniciativa "OpenGL 2.0"). Mas foi ideia deles.

E aqui está a parte realmente triste: o 3D Labs estava certo (principalmente). O GLSL não é uma linguagem de sombreamento baseada em vetores, como era o HLSL na época. Isso ocorreu porque o hardware do 3D Labs era escalar (semelhante ao hardware moderno da NVIDIA), mas eles estavam certos na direção que muitos fabricantes de hardware seguiram com seu hardware.

Eles estavam certos em usar um modelo de compilação online para uma linguagem de "alto nível". O D3D até mudou para isso eventualmente.

O problema era que o 3D Labs estava certo na hora errada . E, ao tentar convocar o futuro muito cedo, tentando ser à prova do futuro, eles descartam o presente . Parece semelhante a como o OpenGL sempre teve a possibilidade de funcionalidade de T&L. Exceto que o pipeline de T&L do OpenGL ainda era útil antes do T&L de hardware, enquanto o GLSL era um passivo antes que o mundo o alcançasse.

GLSL é uma boa linguagem agora . Mas por enquanto? Foi horrível. E o OpenGL sofreu por isso.

Caindo em direção à apoteose

Enquanto eu sustento que o 3D Labs deu o golpe fatal, foi o próprio ARB quem acionou o último prego no caixão.

Esta é uma história da qual você já deve ter ouvido falar. Na época do OpenGL 2.1, o OpenGL estava com um problema. Tinha um monte de lixo legado. A API não era mais fácil de usar. Havia 5 maneiras de fazer as coisas, e nenhuma idéia de qual era a mais rápida. Você pode "aprender" o OpenGL com tutoriais simples, mas realmente não aprendeu a API do OpenGL que oferece desempenho e poder gráfico reais.

Então o ARB decidiu tentar outra reinvenção do OpenGL. Isso foi semelhante ao "OpenGL 2.0" do 3D Labs, mas melhor porque o ARB estava por trás dele. Eles chamavam de "Longs Peak".

O que há de tão ruim em levar algum tempo para melhorar a API? Isso foi ruim porque a Microsoft havia se deixado vulnerável. Veja, isso foi na época da troca do Vista.

Com o Vista, a Microsoft decidiu instituir algumas alterações muito necessárias nos drivers de vídeo. Eles forçaram os motoristas a enviar ao SO para virtualização da memória gráfica e várias outras coisas.

Embora se possa debater os méritos disso ou se isso era realmente possível, o fato permanece o seguinte: a Microsoft considerou o D3D 10 apenas o Vista (e acima). Mesmo se você tivesse um hardware compatível com o D3D 10, não poderia executar aplicativos do D3D 10 sem também executar o Vista.

Você também deve se lembrar que o Vista ... hum, digamos que não deu certo. Então, você tinha um sistema operacional com baixo desempenho, uma nova API que era executada apenas naquele sistema operacional e uma nova geração de hardware que precisava que a API e o SO fizessem algo além de ser mais rápido que a geração anterior.

No entanto, os desenvolvedores podem acessar os recursos da classe D3D 10 via OpenGL. Bem, eles poderiam se o ARB não estivesse ocupado trabalhando em Longs Peak.

Basicamente, o ARB passou um bom ano e meio a dois anos em trabalho para melhorar a API. Quando o OpenGL 3.0 foi lançado, a adoção do Vista terminou, o Win7 estava ao virar da esquina para colocar o Vista atrás deles, e a maioria dos desenvolvedores de jogos não se importava com os recursos da classe D3D-10. Afinal, o hardware do D3D 10 executava aplicativos do D3D 9 muito bem. E com o surgimento de portas de PC para console (ou desenvolvedores de PCs saltando de navio para console de desenvolvimento. Faça a sua escolha), os desenvolvedores não precisavam dos recursos da classe D3D 10.

Agora, se os desenvolvedores tivessem acesso a esses recursos anteriormente via OpenGL em máquinas WinXP, o desenvolvimento do OpenGL poderia ter recebido uma chance muito necessária. Mas o ARB perdeu a oportunidade. E você quer saber a pior parte?

Apesar de passar dois anos preciosos tentando reconstruir a API do zero ... eles ainda falharam e voltaram ao status quo (exceto por um mecanismo de reprovação).

Portanto, o ARB não apenas perdeu uma importante janela de oportunidade, como também não fez a tarefa que os fez perder essa chance. Praticamente falha épica por toda parte.

E esse é o conto do OpenGL vs. Direct3D. Uma história de oportunidades perdidas, estupidez grosseira, cegueira voluntária e tolice simples.


24
Você já escreveu isso em algum lugar ou se estava em cima de sua cabeça?
Kristofer Hoch

38
@ Kristofer: Eu não sei se você pode chamá-lo "de cabeça para baixo" por algo que levou mais ou menos uma hora para compor, mas eu não o escrevi em algum lugar.
Nicol Bolas

18
@ F.Aquino: Então você está disposto a atribuir isso ao sistema de renderização usado pelos jogos FPS, e não ao próprio mecanismo? Mesmo que o CS seja baseado no Half-Life 1, que é baseado no Quake? Desculpa; não comprando. É verdade que eu não compro a premissa de que novos FPSs não têm potencial para e-sports, mesmo que haja muitos torneios de e-sports centrados nos FPSs mais novos. Eles podem não ter a mesma atração que o CS faz para alguns jogadores, mas não cometem o erro de pensar que esses jogadores compõem todos os e-sports do FPS.
Nicol Bolas

165
Uau. Eu nem me importo com a maioria dessas coisas e ainda é uma ótima leitura!
precisa

12
Which they, in all of Microsoft's collective imagination, called... the High Level Shading Language (HLSL).LOLled por mais de 6 minutos.
ApprenticeHacker

133

Achei estranho que todo mundo estivesse focado na base de usuários, quando a pergunta é 'desenvolvedores de jogos', não 'editores de jogos'.

Para mim, como desenvolvedor, o Linux é uma bagunça sangrenta. Existem tantas versões, gerenciadores de área de trabalho, kits de interface do usuário, etc. configurações, é um pesadelo !

Por outro lado, a Microsoft está fornecendo (na maioria das vezes) incrível compatibilidade com versões anteriores e estabilidade da plataforma. É possível segmentar toda uma gama de máquinas com um instalador de código-fonte fechado, por exemplo, computadores executando Windows XP, Vista e versões de 7, 32 e 64 bits, sem redistribuíveis DX ou VC adequados instalados, etc.

Uma última coisa, POR FAVOR , TODOS NA INTERNET PARAM DE COMPARAR O OPENGL E O DIRECTX! Compare o Direct3D x o OpenGL ou não faça isso . O DirectX fornece suporte de entrada, suporte de som, reprodução de filme, etc., que o OpenGL não oferece.


40
"Para mim, como desenvolvedor, o Linux é uma bagunça sangrenta." De fato! Eu trabalho em um ambiente com o Fedora e o Ubuntu. Temos problemas mesmo entre apenas esses dois. (Devo acrescentar que eu sou um fanboy Linux.)
David Poole

48
@ jv42: Parece um equívoco comum: quase todas essas versões, gerenciadores de desktop e kits de interface do usuário, etc., são bastante irrelevantes para a instalação e o funcionamento de um jogo. Se o seu jogo (conforme fornecido) depender de mais do que libGL, libX11 e libasound (ou libopenal, libao ou liboss), você estará fazendo algo errado.
greyfade

19
@greyfade "Se o seu jogo (conforme fornecido) depende de mais do que libGL, libX11 e libasound (ou libopenal ou libao ou liboss), você está fazendo algo errado." - E então você faz o link para o libao-0.0.4alpha, e seu usuário tem o libao-0.0.5beta e nada funciona.
3051111

17
Empacotar um binário para que ele seja executado em todas as distribuições Linux não é tão difícil. Caramba, os desenvolvedores do Blender fazem isso a cada lançamento. Existe apenas o pacote de versão Linux (dois, 32 e 64 bits) do Blender.
datenwolf


88

É porque existem mais usuários do Windows no planeta do que Linux e Mac. A verdade é que as pessoas fazem coisas para o que tiver o maior mercado.
O mesmo acontece com os telefones celulares: o Android e o iPhone têm jogos incríveis, mas o Windows Mobile e o Symbian não ...


24
@Mahmoud Hossam: Isso não é verdade. O uso do OpenGL não significa que todo o seu aplicativo funcione magicamente em um ambiente * nix, significa que o mecanismo de gráficos funcionará (e mesmo assim não significa que não haja peculiaridades no Windows (por exemplo) existe no Linux e vice-versa). Essa não é a cesta completa e, definitivamente, há um custo considerável de manter o código para várias plataformas.
Ed S.

5
@Mahmoud: Exatamente. E se você não se incomodará em portar para o Linux / Mac OS de qualquer maneira, por que não usar a biblioteca nativa? O DirectX é muito mais suportado no Windows do que o OpenGL.
Dean Harding

10
@ Mahmoud: toda a premissa da pergunta é "por que os desenvolvedores preferem o Windows". Resposta: porque é isso que os jogadores usam. Não faz sentido migrar para o Linux / Mac, se isso representa apenas 2% do seu mercado, e nesse caso, não faz sentido usar o OpenGL se você não for portar de qualquer maneira.
Dean Harding

4
@Mahmoud, não é tarefa do desenvolvedor de jogos levar as pessoas a mudarem para o Linux.
GrandmasterB

6
@ John + de 10 milhões de jogadores do World of Warcraft gostaria de conversar com você. E este é apenas um jogo.
Marcelo

50

Como o Windows tem mais de 90% de participação no mercado, e o Linux (desde que você perguntou especificamente sobre o Linux) tem a reputação de ter muitos usuários que não gostam de pagar por software. Se isso é verdade ou não, é irrelevante; a percepção existe e influencia as decisões das pessoas.


1
Se os desenvolvedores usarem o OpenGL, ele oferecerá suporte ao Windows e ao linux; portanto, será uma vantagem de marketing atrair usuários do Linux que estão dispostos a pagar e estão usando o Linux porque acreditam que é melhor.
M.Sameer

9
Mesmo usando o OpenGL, há custos no desenvolvimento e teste de plataforma cruzada que o mercado Linux não justifica. O Directx também é (infelizmente) uma plataforma melhor para jogos de PC no momento do que o OpenGL - há muito poucos jogos novos em PCs sendo criados no OpenGL.
Martin Beckett

25
A plataforma cruzada não é tão simples quanto "apenas codifique para o OpenGL".
System Down

13
Isso não é verdade, na verdade, que os usuários do Linux não pagam pelo software. O Humble Indie Bundle (um pacote de jogos que você pode obter por qualquer quantia que queira pagar) foi feito duas vezes agora e sempre que mostrava aos usuários do Linux pagando mais do que os usuários do Windows pelo pacote.
Htbaa 22/03

9
@Htbaa É claro que eles pagaram mais, estavam desesperados, provavelmente são os únicos jogos que eles jogam no sistema operacional.
Marcelo

11

Como o Windows é apoiado por uma grande organização, que há mais de uma década decidiu que quer que o desenvolvimento de jogos aconteça em sua plataforma .

Isso não era verdade para o Mac e não é verdade agora. Nem mesmo para iOS. A Apple não fornece ferramentas para o desenvolvimento de jogos para iOS. Mas é um mercado enorme (há mais iPhones por aí do que PCs em 1995) com relativamente pouca concorrência, então as pessoas fazem isso de qualquer maneira.

Quanto ao Linux, não há sequer algum tipo de instituição central que possa definir qualquer tipo de prioridade. A direção em que o Linux está indo é mais menos determinada por um monte de programadores muito bons, ainda que ligeiramente mundanos.

Para criar um jogo para PC hoje, você precisa de muitos artistas 2D / 3D, designers de jogos, roteiristas, atores, testadores e outros. Quanto à programação real, você pode simplesmente usar um mecanismo de jogo real (CryEngine, Unreal Engine, Quake Engine, Source Engine). Portanto, você poderá fazer a coisa toda sem nenhum programador real.

Por esse motivo e pela natureza dos negócios, os programadores têm pouco a dizer em qual plataforma é escolhida. E, normalmente, os gerentes buscam suporte, algo que a Microsoft alega oferecer, e lidam com coisas que de alguma forma são adaptáveis ​​aos seus padrões de pensamento, o que o código aberto não é.

Por esse motivo, a maioria dos desenvolvimentos comerciais de software para usuários finais é feita no Windows.
Eu trabalho para uma empresa que cria jogos em flash e, portanto, não está vinculada a uma plataforma específica. No entanto, todos desenvolvemos no Windows, porque a maioria das ferramentas que usamos não está disponível para Linux.


2
"Então, você poderá fazer a coisa toda sem nenhum programador real". Você esqueceu o sarcasmo.
Allon Guralnek

@AllonGuralnek: Não há sarcasmo lá. No desenvolvimento clássico de jogos grandes, os programadores criarão mecanismos e meios para fornecer conteúdo e comportamento (por meio de editores visuais ou scripts reais) e, em seguida, os designers de jogos / níveis / missões usarão esses meios. Se você comprar um motor funcionando e suficientemente potente, poderá basicamente cortar o primeiro passo.
Jun2

2
Você tem um exemplo específico de um jogo razoavelmente notável que foi criado sem escrever uma única linha de código?
Allon Guralnek

1
@ AllonGuralnek: Eu não disse que alguém criaria jogos sem código , mas sem programadores . Você não precisa ser um programador para criar um mod totalmente inovador. O DotA é o mais popular que consigo pensar em toda parte.
back2dos

1
@AllonGuralnek: Não. Pessoas que escrevem código são pessoas que escrevem código. O designer de níveis precisa ter um certo entendimento de script. Muitos programadores geralmente precisam ter uma certa quantidade de habilidades de gerenciamento. Não torna o primeiro programador, nem o gerente. Sua avaliação do DotA também está errada. Em primeiro lugar é inteiramente jogo de mudança, transformando um RTS em um novo gênero e em segundo lugar é considerado como um jogo separado por muitas ligas de eSports incluindo os ESWC
back2dos

10

Como alguns já disseram, a parte mais importante é a base de usuários. 95% dos usuários de PC usam Windows. Os jogadores de PC usam quase exclusivamente o Windows. Mesmo aqueles que usam Mac ou Linux costumam rodar jogos do Windows através de alguma virtualização ou emulação (com muito, muito poucas exceções).

Mas demográfico não é tudo. Eu não subestimaria a parte que a Microsoft está fazendo para tornar a plataforma mais atraente para os desenvolvedores de jogos. Basicamente, você obtém um conjunto completo de ferramentas de graça , principalmente o XNA Game Studio . Isso permite não apenas o desenvolvimento para o Windows, mas também para o Xbox360 . E com a edição mais recente, mesmo para telefones WP7. Obviamente, por ser uma ferramenta da Microsoft, ele usa o DirectX, não o OpenGL.


3
Nota para todos os leitores que viajam no tempo: a partir de abril de 2014, o XNA estará oficialmente morto. A última versão (4.0) foi publicada em 2010 e não verá uma nova versão entre agora (2013) e o pôr do sol.
Aren

1
Outra observação para qualquer leitor que viaja no tempo: o desenvolvimento do Windows 8 (ou superior) não será mais gratuito no futuro.
Fouric

6

Ewwww, eu não. Eu uso o Linux quase exclusivamente. Inicializo duas vezes no Windows para criar o Windows e uso o Mac para o Mac, mas é isso.

O truque é uma estrutura de plataforma cruzada que desenvolvemos ao longo dos anos. Nossos jogos são construídos sobre isso e se comportam de maneira idêntica no Linux / OpenGL, Mac / OpenGL e Windows / Direct3D (e em breve no iOS / OpenGL).

É certo que minha empresa não possui títulos AAA, por isso pode não se aplicar a eles, mas fazemos os melhores jogos casuais (consulte o site - CSI: NY, Murder She Wrote e os dois próximos 2011 são exemplos de títulos usando licenças importantes, The Os casos perdidos de Sherlock Holmes 1 e 2 também foram bastante bem-sucedidos)

Eu não desistiria do gedit + gcc + gdb + valgrind por mais nada.


3
O gedit é subestimado para programação #
Alexander Alexander

2
@Alexander, subestimado nem sequer começar a explicar
Shahbaz

3
Desculpe, eu desisti do gedit no final. Eu agora uso gvim e eu sou muito mais feliz :)
ggambett

4
  1. Inércia. Se você já usou o Windows no passado, mudar para outra coisa é um aborrecimento. Se você usa o Windows DirectX, é mais fácil e mais provável que funcione bem do que o OpenGL.
  2. Quota de mercado. A participação de mercado do Windows no desktop é maior que a do OS X, que por sua vez é maior que a do Linux. Dinheiro fala mais alto.
  3. Marca. O DirectX é mais conhecido do que coisas como SDL (que é o tipo de coisa que você precisa para replicar alguns dos recursos do DirectX que vão além do OpenGL).
  4. Menos confusão. O Linux do usuário suportará apenas até OpenGL 1.4 ou OpenGL 2+? Você pode usar um tutorial do OpenGL 2.0 como uma introdução ao OpenGL moderno. Capítulo 1: O Pipeline de gráficos na sua versão Linux?

Hoje em dia, o Linux é mais um objeto antigo no que diz respeito ao desenvolvimento de jogos, e a maioria dos desenvolvedores seria melhor fazer fiscalmente uma versão da porta do OS X antes de uma versão do Linux (veja coisas como o Steam). Mesmo assim, o mercado de consoles vale mais do que essas duas plataformas combinadas para jogos ...

Se você queria mono plataforma DirectX está bem. Se você quer ser multiplataforma, há uma grande chance de você ter que usar o OpenGL em pelo menos algumas das outras plataformas.


2
A resposta para a pergunta 4 é: 2+. O Mesa3D suporta até OpenGL 2.1, o que significa que todos os drivers gráficos para hardware 3D para X11 suportam pelo menos o OpenGL 2.1 desde o Mesa versão 6.8. Isso abrange todas as distribuições Linux lançadas nos últimos dois anos e os drivers binários que a NVIDIA e a AMD oferecem suporte para versões 3.0 e posteriores. Isso não inclui os usuários do intel895, mas eles foram preteridos.
greyfade

1
Receio que não seja esse o caso. Computadores com chipsets i915 / i945 (GMA 900/950) estão (ainda) sendo vendidos e não são preteridos. Mesmo nas distribuições modernas de alguns meses atrás (Ubuntu 11.04 / Fedora 15), o glxinfo retornará uma versão do OpenGL não superior a 1.4 (Mesa 7.11-devel). Esse hardware da Intel simplesmente não pode executar versões posteriores sem a ajuda do software; portanto, até que o softpipe esteja disponível por padrão, o Linux nessas placas nunca fará uma versão superior do OpenGL. Segmentação OpenGL 2.0 (ou superior) irá parar um programa em execução em uma ampla gama de sistemas desktop Linux ...
Anon

Mesmo assim, não vejo a preocupação. Esses mesmos chipsets têm limitações no Windows, então a maioria dos jogos com gráficos pesados ​​estaria fora de questão de qualquer maneira.
Greyfade 19/07

4

A resposta é óbvia. O objetivo de escrever um jogo é ganhar dinheiro. Mais usuários finais executam o Windows; portanto, há um mercado maior e você esperaria ganhar mais dinheiro com um jogo do Windows do que um jogo do Linux. É simples assim.

Se alguma vez você se perguntar: "Por que alguém faz ...", lembre-se de que o dinheiro faz o mundo girar.


1
Sim, mas você pode fazer um jogo de plataforma cruzada e obter mais do que apenas usuários do Windows;)
M.Sameer

Ser multiplataforma não é tudo. Se o número de usuários extras que você obtiver for uma porcentagem relativamente baixa, será necessário equilibrar o custo extra de desenvolvimento e o custo de suporte contínuo com o valor extra que você receberá deles e tomar uma decisão informada com base nos dados reais reais. Não existe uma resposta certa ou errada globalmente para essa, mas existe uma resposta certa ou errada para cada programa individual, e o que é certo para um programa pode estar errado para outro.
Maximus Minimus

4

Ferramentas, ferramentas, ferramentas.

Isso é o que se resume. Desenvolva no Windows e obtenha acesso a algumas das melhores ferramentas de desenvolvimento do planeta. Nada se aproxima nem remotamente do depurador do Visual Studio, os tempos de execução do DirectX Debug são impressionantes, o PIX é incrível e equivalentes equivalentes simplesmente não existem em outras plataformas / APIs. Claro, há algumas coisas boas lá; Não estou dizendo que as ferramentas em outras plataformas são ruins, mas as que a MS fornece estão tão à frente do pacote (exceção honrosa: Valgrind) que nem sequer é engraçado.

Resumindo, essas ferramentas ajudam você. Eles ajudam você a fazer as coisas, ajudam a ser produtivo, ajudam a se concentrar nos erros do seu próprio código, em vez de lutar com uma API que nunca se comporta como documentado.


PIX é incrível. Depurar shaders clicando em um pixel incômodo e vendo o que aconteceu é ótimo!
precisa

4

Então, eu examinei todas essas respostas e, como desenvolvedor de jogos que possui código em jogos de console que estão nas prateleiras do Walmart, tenho uma resposta muito diferente.

Distribuição.

Veja, se você quer estar em um console da Nintendo, precisa obter a permissão da Nintendo, comprar das fábricas da Nintendo, pagar despesas gerais da Nintendo, negociar com o Walmart, lidar com armazenagem, você precisa de dinheiro adiantado para fabricar, imprimir caixas, enviar , para fazer todo o seguro, etc.

Se você deseja acessar o XBox, com certeza existe o XBLA, mas ainda precisa da bênção da Microsoft, precisa esperar sua vez na fila, são dezenas de milhares de dólares apenas para lançar um patch, etc.

No iOS, você ainda precisa da Apple, e eles podem (e fazem) caprichosamente.

No Steam, você ainda precisa da permissão ou da luz verde da Valve e de muito dinheiro.

.

No Windows? Você configura um site e um botão de download.

.

Não estou dizendo que as outras plataformas não são valiosas. Mas há tão * muito * coisas horríveis acontecendo quando você está tentando desenvolver um jogo, que, para mim, a promessa de ser capaz de simplesmente bater um binário em um site e se concentrar no trabalho - pelo menos para começar - realmente reduz muitas barreiras potenciais a falhas.

"Podemos fazer a porta XBLA mais tarde, quando as coisas estiverem estáveis".

E, em menor grau, com certeza isso também é bom para o Linux e, se sete clientes forem bons, você poderá começar por aí.

Mas o Windows tem três vantagens enormes: desenvolvimento genuinamente aberto, implantação genuinamente aberta e uma base de clientes muito grande e muito ativa, interessada em coisas peculiares.

É difícil imaginar onde mais eu prefiro começar.


3

Eu acho que você deveria ler mais sobre a história do DirectX e este artigo .

Eu acho que a MS escolheu o DX em vez do openGL porque eles gostam de prender as pessoas a usar seu próprio sistema operacional.


4
não, eles criaram o DX porque o OGL não é otimizado para Windows, não pode ser expandido rapidamente para aproveitar os novos desenvolvimentos de hardware e sistema operacional, não incorpora som, entrada de controle etc. etc.
jwenting

2
O iow DX é especializado no Windows por razões de desempenho e permite que a Microsoft continue assim e incorpore rapidamente a nova tecnologia à medida que ela estiver disponível. O OpenGL está parado no nível de suporte a hardware gráfico que existia há 5 anos, talvez mais, porque é um esforço do comitê.
22711 jwenting

1
@jwenting Eu não acho que o desempenho foi a única razão pela qual eles não o portaram para outras plataformas, quero dizer, se eles quisessem portá-lo, pelo menos eles teriam o código aberto e o deixaram para a comunidade implementar isto.
Mahmoud Hossam 22/03

1
eles não abriram o código-fonte C #, enviaram a especificação da linguagem aos organismos de padrões. A Microsoft é membro desses órgãos de padrões e faz isso o tempo todo (eles têm grandes contribuições para os padrões html, javascript e outros, por exemplo). O código-fonte aberto significaria liberar o código-fonte do compilador e das bibliotecas sob algo como o APL.
jwenting

1
@jwenting: Para constar, há uma implementação do Direct3D 10 e 11 no Linux que tem como alvo a estrutura do Gallium3D. (E isso não tem nada a ver com o Wine.) Também discordo de sua afirmação de que "OGL não é otimizado para Windows". Essa é uma questão de implementações de driver de hardware, não uma limitação do OpenGL.
greyfade 29/06

1

Muito tem a ver com política e controle. No final dos anos 90, a SGI e a MS concordaram em combinar esforços:

http://en.wikipedia.org/wiki/Fahrenheit_graphics_API

A SGI investiu pesadamente no projeto, a MS não. A SGI precisava de MS mais do que a MS precisava de SGI. O resto é história.

D3D e OpenGL são duas APIs muito diferentes; cabe ao desenvolvedor escolher qual é o mais adequado para suas necessidades.


0

Simplesmente porque o Linux falhou terrivelmente como um sistema de desktop. Como alguém apontou anteriormente, o Linux é uma bagunça para os desenvolvedores (diferentes bibliotecas, kits de ferramentas da interface do usuário, etc.)

Outro problema é o freetardismo e a falta de suporte para software proprietário. A Nvidia sempre fornece drivers finos (proprietários) para Linux, no entanto o Ubuntu e outras distribuições não o estão enviando. Também não há interface de driver binário disponível para Linux e Windows. (Há um arquivo de texto chamado binaryApiNonsense.txt ou algo nas fontes do Kernel). Dito isto, apenas o hardware da Nvidia é suportado adequadamente no Linux. Você pode jogar a maioria dos jogos de software de identificação usando o hardware Nvidia no Linux.

Próxima coisa: ferramentas de desenvolvimento. O MSFT fornece excelente suporte a C ++ e o depurador do Visual Studio é melhor que o gdb em relação ao C ++. Por último, mas não menos importante, faltam outras ferramentas, como o Photoshop. Além disso, o .net permite criar rapidamente ferramentas de GUI. Muitos estúdios de jogos codificam suas ferramentas para uso interno usando a estrutura .net.

Eu quase esqueci: o sistema gráfico é horrível, nos dias em que eles acabaram de transportar o X11 porque era a coisa mais fácil que funcionava. Eles falharam ao projetar e implementar adequadamente um sistema gráfico moderno que o OSx e o Win possuem.


4
Hmm? Minhas placas intel e ati funcionam bem no Linux ... E o que há de errado com o X11? Eu sempre achei que era muito melhor do que as alternativas para outros sistemas operacionais (principalmente o Windows) por causa de sua arquitetura cliente-servidor.
alternativa

Não, eles não digitam glxinfo e vê que o tempo está bom ou não! O X11 é horrível quebrado apenas um exemplo theinvisiblethings.blogspot.com/2010/08/…
Nils

e se você ler a última frase, o próprio Linus implementou o patch no nível do kernel - não o X11.
alternativa

1
Eu não sei muito sobre sistema gráfico (você pode ter razão), mas dizer que o Linux falhou como sistema de desktop não é verdadeiro ou, pelo menos, não é preciso. Mudei do Windows para o Linux e me sinto muito produtivo desde então. O desempenho do Linux é superior ao Windows em todas as máquinas que usei. Também não codifico C ++ e quero saber onde fica o Eclipse como um IDE C ++ em comparação com o Visual Studio.
M.Sameer

Abaixe os lança-chamas. Eu acho que a opinião geralmente aceita é que o VS é o melhor IDE. No entanto, o Eclipse ainda é jovem e tem um caminho a percorrer - veremos. No entanto, eu simplesmente amo a facilidade com que tudo é programável e programável no Linux!
Vorac
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.