O que faz com que alguns computadores tenham o OpenGL lento ou não, e como corrigi-lo?

7

Estou usando Java com JOGL para criar gráficos 2D aprimorados em OpenGL. As operações gráficas que utilizo não são nada sofisticadas e devem ser suportadas por quase todas as placas gráficas recentes. Por exemplo, meu jogo roda muito bem em um Netbook.

Eu esperava que o jogo fosse executado na maioria dos computadores. Funciona bem em meus próprios computadores. No entanto, achei alguns computadores com desempenho muito lento (aparentemente, fallback de software, produzindo cerca de 2 quadros por segundo). Eu executei um aplicativo LWJGL em um desses computadores. Ele não roda de forma alguma (ele relata algo como org.lwjgl.LWJGLException: Formato de pixel não acelerado, você pode encontrar vários tópicos do fórum reclamando sobre isso, mas sem soluções aparentes, exceto a sugestão de que é um problema de driver). Outro software OpenGL também não parece funcionar. Também descobri que minha versão em Flash do jogo com exatamente os mesmos efeitos gráficos funciona muito bem em tela cheia no mesmo computador. O computador em questão possui uma placa ATI recente, mas infelizmente não tenho acesso ao gerenciador de drivers.

O problema parece bastante amplo. Eu acho muito lamentável que o OpenGL nem sempre forneça acesso aos recursos gráficos encontrados na maioria dos computadores. Isso o torna menos atraente para jogos 2D casuais, que eu espero executar em qualquer computador.

Algum de vocês encontrou esse problema e conseguiu corrigi-lo? AFAIK, tanto a NVidia quanto a ATI fornecem o OpenGL como parte de seus conjuntos de drivers padrão, mas talvez haja algumas exceções? Esse problema é causado por drivers de terceiros que não suportam o OpenGL e o problema pode ser corrigido com a instalação de drivers melhores? Quantas outras placas gráficas existem por aí sem os drivers OpenGL?

EDIT : Como observação final, posso concluir que o OpenGL simplesmente não é bem suportado em máquinas Windows. A Microsoft parece ter feito o possível para mantê-lo fora da plataforma, por exemplo, deixando deliberadamente de fora os drivers OpenGL em alguns pacotes de drivers do Windows. Obtenha os drivers do fornecedor e você obtém o OpenGL; obtenha os drivers padrão que o Windows baixa para você e você não. Isso tem causado problemas para os outros também. Por exemplo, para implementar o WebGL, os navegadores da Web usam Angle , que é um emulador OpenGL ES para DirectX. Então, o que realmente precisamos é algo como Angle, apenas para o OpenGL completo.

Boris van Schooten
fonte
A trama se complica ... parece que o computador "lento" em que testei realmente possui drivers ATI 3D instalados ... Vou examinar mais detalhadamente, mantendo-o informado.
Boris van Schooten
Lembre-se de que a Intel vende mais hardware gráfico do que a ATI e a nVidia combinadas. Por uma margem enorme. Você precisaria garantir que as coisas funcionassem também em gráficos simples e integrados.
precisa
Bem, o jogo funciona bem em um netbook com o Intel Graphics Media Accelerator 950, que deve ser uma das GPUs mais lentas do mercado.
Boris van Schooten
@Borris: O GMA 650 é, na verdade, uma das GPUs mais rápidas que a Intel fabrica - é capaz de executar o Aero no meu entendimento. Muito do que eles vendem não pode fazer isso (e realmente não fornecer qualquer forma de gráficos acelerados por hardware)
Billy ONeal
@billy obrigado pela informação. Realmente, os computadores ainda são vendidos sem recursos 3D? Quero dizer, um netbook de US $ 250 tem o 650, e vi laptops mais antigos que também podem gerenciar gráficos 3D.
Boris van Schooten

Respostas:

5

Esse é um problema comum mesmo em novas GPUs quando os drivers não estão instalados. A versão do OpenGL é 1.0 1.1 e está sendo executada no modo de software.

Instale / atualize os drivers da GPU e adicione a consulta de versão ao seu aplicativo. Se a versão OpenGL retornada estiver abaixo de 1.1, definitivamente haverá drivers ausentes.

Kromster
fonte
2
Isso corrigiu o problema neste computador. Ainda estou interessado nas experiências de outras pessoas. Usei o visualizador de extensões do OpenGL para verificar o driver do OpenGL. Ele relatou o OpenGL 1.1 genérico da GDI (= renderização de software). Funcionou após apenas reinstalar os drivers. AFAIK, os drivers originais foram instalados usando o processo de instalação padrão (que também encontra drivers específicos da GPU), em vez de baixá-los diretamente do site do fornecedor. A versão relatada do OpenGL agora é 3.3. Meu aplicativo JOGL agora funciona sem problemas, assim como os aplicativos LWJGL.
Boris van Schooten
1

Só estou supondo aqui, mas você está usando shaders? Qual placa de vídeo estava no computador que você testou e lançou a exceção? Muitas placas Intel antigas incorporadas não têm suporte para pixel shader.

Seu único recurso real, se for esse o caso, é fornecer um fallback de função fixa.

Tetrad
fonte
O que é um fallback de função fixa?
Xavier
11
Um fallback de função fixa é um caminho de renderização (pense em um sistema de renderização diferente) que não usa sombreadores durante a renderização e, em vez disso, usa o pipeline de função fixa para obter efeitos semelhantes (por exemplo, apenas usa chamadas OpenGL até a versão 1.5 ou algo parecido) .
26411 ChrisE
Eu não estou usando shaders, apenas mapeamento de textura e mistura alfa, todo o material do opengl 1.x.
Boris van Schooten