Para qual versão do OpenGL devo codificar, considerando as considerações de compatibilidade e desempenho? [fechadas]

19

Quando a especificação do OpenGL é atualizada, eles apenas adicionam recursos. Portanto, em teoria, o melhor e mais recente hardware com suporte para os perfis Core e Compatibility deve executar o código OpenGL1.1 super antigo. Isso acabou sendo verdade. Passei 12 meses aprendendo o OpenGL1.1 e tenho uma boa noção disso.

Eu li alguns capítulos de um daqueles novos e sofisticados livros do OpenGL4.2. Quase todos os recursos em que confio foram preteridos (como as Listas de Display), o que me permite assumir que existem maneiras melhores de fazer todas essas coisas.

Vamos considerar que o 1.1 provavelmente será suportado, na íntegra, por TODOS os hardwares modernos. 1.1 foi lançado em 1992. Não estou codificando da maneira mais difícil apenas para suportar PCs de 20 anos. :-p Eu acho que é razoável supor que a maioria dos jogadores esteja executando um hardware que atinge o limite médio de cerca de 5 anos.

Eu acho que os métodos mais recentes são projetados para serem universalmente uma das duas coisas: melhor desempenho ou mais fácil de codificar. Eu li em algum lugar que nunca são os dois! XD

Qual versão do OpenGL é mais amplamente suportada por hardware de 5 anos? Qual versão faz mais sentido usar, considerando essas considerações?

Suds
fonte

Respostas:

19

Dadas as suas considerações, passei para ver quando as especificações do OpenGL para cada versão foram lançadas e também considerei algumas idéias gerais do que vi.

O OpenGL 3, que apresentou FBOs, VAOs e outras coisas, foi lançado em 11 de julho de 2008, quase 5 anos atrás. Obviamente, você não pode esperar que todos os cartões após essa data tenham o OpenGL 3 disponível imediatamente.

Analisando a Pesquisa de Hardware do Steam , 40% são do DirectX 10. Como o OpenGL 3 exigia uma placa de vídeo semelhante, geralmente é seguro assumir que a maioria das placas do DirectX 10 pode executar pelo menos o OpenGL 3.

O OpenGL 3 é suportado em placas desde a série GeForce 8xxx, que eram bastante populares se bem me lembro. Também interessante notar é que os gráficos Intel HD 2000 e 3000 (Sandy bridge) suportam apenas até OpenGL 3, portanto, lembre-se disso se você planeja segmentá-los.

Conclusão: o OpenGL 3 é uma boa aposta (lembre-se de que a maioria dos jogadores, dependendo do seu público-alvo, provavelmente terá um hardware melhor que a média).

DMan
fonte
Esta é uma ótima resposta. Era exatamente o tipo de insight que eu estava procurando.
Suds
3
"Também interessante notar é que os gráficos Intel HD 2000 e 3000 (Sandy bridge) suportam apenas até OpenGL 3" Nota: eles suportam apenas GL 3.1 (porque a Intel simplesmente não se importa). E, como é Intel, o "suporte" deve ser tomado com um pouco de sal. Seu hardware pode suportar o 3.3, mas eles não expõem isso (porque, novamente, eles não se importam). Eu evitaria usar o OpenGL 3.x no hardware da Intel. Na verdade, eu evitaria fazer qualquer coisa baseada em shader no hardware da Intel.
Nicol Bolas
A questão então é levantada; quão saturado é o mercado com hardware Intel? Vale a pena não se preocupar com gráficos intel e usar o OpenGL3.x de qualquer maneira? Ou existe bastante hardware gráfico da Intel para realmente importar?
Suds
1
Um problema é o OSX. A versão mais recente 10.7.x suporta apenas OpenGL 3.2 , 10.6.x suporta apenas 3.0 (ou talvez até 2.x). 10.5.x varia muito, dependendo do cartão, 1.3, 1.5 e 2.0 são possibilidades. Esses sistemas ficarão para sempre presos nessas versões do OpenGL, a menos que o usuário pague dinheiro à Apple por uma atualização. Não há atualizações de driver da placa de vídeo ou algo semelhante para o OSX que atualize o OpenGL. Outros problemas são alguns dos chipsets Intel embarcados usados ​​em netbooks. Muitos deles são apenas OpenGL 2.0 ou pior.
David C. Bishop
E então você tem o 3DS, que ainda está balançando OpenGL 1.1 ...
kirbyfan64sos
8

Eu começaria aqui: http://store.steampowered.com/hwsurvey

Eu não segmentaria um período de tempo nem uma porcentagem de usuários, por exemplo, se você segmentar 4cpus, atingirá apenas 45% dos usuários, mas se trabalhar para 2, chegará perto de 90%

salmonmoose
fonte
1
Onde você viu o OpenGL? Eu vejo apenas o DirectX (que é algo interessante de observar se você planeja segmentar apenas o Windows).
dman
Eu estou supondo que você fazer o trabalho braçal com base na quebra da placa gráfica
Jimmy
Sim - eu não vi nada sobre o OpenGL - mas você pode obtê-lo nos modelos de cartões, ou, de fato, acredito que haveria uma boa quantidade de correlação entre as versões do DirectX e o OpenGL.
salmonmoose
3

A resposta depende se você precisa ou não quer rodar nos gráficos da Intel lançados dentro do prazo mencionado.

Se o fizer, limite-se ao OpenGL 2.1 (ou até 1.5), se não o fizer, o 3.x parecerá razoável.

Sim, as versões mais antigas do OpenGL ainda são executadas e, de uma perspectiva, elas podem parecer mais simples. O ponto em que as coisas ficam fora de forma é quando você tenta fazer coisas (e você fará) que elas não suportam com muita facilidade. O OpenGL 1.1 não é apenas da maneira mais difícil - geralmente é a maneira impossível se você deseja obter determinados resultados.

Maximus Minimus
fonte
Ocorre-me que devo adicionar um exemplo do por que o 1.1 é frequentemente impossível. Um deles que pode ser facilmente relacionado à funcionalidade 1.1 são as várias passagens de mesclagem. Como você não possui FBOs e sua maioria é limitada a 8 bits por componente de texturas, verá que, à medida que a mistura passa, acumula-se, você começará a perder precisão. Use passes 3/4/5 e o resultado final começará a parecer (ou pior que) gráficos de 16 ou 8 bits. No entanto, muitas vezes são necessárias várias passagens para simular efeitos de nível superior (a multi-extensão básica seria uma que todos conhecemos) com um conjunto de recursos 1.1.
Maximus Minimus
Até os gráficos Intel HD (Sandy / Ivy Bridge) suportam apenas o OpenGL 3.1, e há um ano. Tudo se resume a se você deseja oferecer suporte a laptops baratos (ou de baixo consumo de energia).
Steve Howard
2
@SteveHoward: Intel Graphics HD pode suportar OpenGL 4. fonte
Janus Troelsen
Esse artigo é de cerca de três meses depois que eu postei meu comentário.
27513 Steve Steve
1

Em primeiro lugar, coisas do OpenGL 1.1 como Listas de Display ainda funcionarão em um novo contexto, desde que você tenha o perfil de compatibilidade (que geralmente é o caso). O único problema é se você espera portar para o OpenGL ES, uma das bibliotecas gráficas específicas do console (elas geralmente são desmontadas do OpenGL semelhante ao OpenGL ES) ou até mesmo do WebGL (que exigiria um pouco de retrabalho de qualquer maneira).

Pessoalmente, eu recomendaria o uso de sombreadores de vértices / fragmentos e VBO's. Eles já existem há bastante tempo e oferecem grandes melhorias de desempenho. Você provavelmente poderia até fornecer um retorno simples se agrupar as funções em uma classe.

Você também pode emular coisas como Vertex Array Objects.

David C. Bishop
fonte
0

Com hardware de 5 anos, algumas pessoas ainda estão usando o XP. E isso significa que você não pode nem codificar com o DirectX 10 ou o OpenGL 3. E o OpenGL 3 tem muitos recursos dos quais você realmente se beneficiaria, como framebuffers e outros. Honestamente, eu aumentaria um pouco os requisitos do sistema para poder incluir esses recursos.

Avi
fonte
8
-1: "Com um hardware de 5 anos, algumas pessoas ainda usam o XP. E isso significa que você não pode nem codificar com o DirectX 10 ou o OpenGL 3." Não é verdade. O OpenGL 3.x funciona bem no XP. É apenas o D3D10 que está restrito ao XP, por motivos de API / driver. Não tem nada a ver com o hardware.
Nicol Bolas
0

É comum que o software 3D tenha caminhos de código para uma versão api gráfica de "linha de base" e uma versão api "mais recente e melhor".

As versões gráficas de linha de base comuns são o D3D9 e o OpenGL 2.1 / GLSL 120. Ambos são notadamente sombreadores de geometria ausentes porque o hardware antigo não os suporta.

Outra opção de linha de base é o ANGLE, que é o GLES 2.0 mais o EGL que é executado no D3D9, no OpenGL de desktop e no GLES 2.0 móvel. É o back-end para o Google chrome e webgl no chrome e Firefox.

http://code.google.com/p/angleproject/

Quanto à versão "mais recente e melhor" que você escolher, isso é mais desafiador. Quanto mais recente a API e o hardware forem direcionados, os recursos com melhor aparência que você pode suportar - mas apenas no hardware mais recente e melhor.

David Jeske
fonte