Obtendo aceleração de hardware OpenGL com SDL no Linux

8

Estou tentando usar o SDL + OpenGL, mas não acredito que a aceleração de hardware esteja funcionando porque a taxa de quadros de cerca de 18.000 polys é de cerca de 24fps em uma máquina com quatro núcleos, mas é de 1-2fps sem esperança em um Intel Atom. Até o núcleo quádruplo começa a se debater quando a contagem de polos se eleva acima disso.

Verifiquei meu código, mas estou claramente perdendo algo óbvio. Alterei meu código de inicialização do SDL para usar o mesmo código do teste SDL OpenGL . Ele informa que SDL_GL_ACCELERATED_VISUAL é 1, mas que hw_disponível em SDL_VideoInfo é 0

Além disso, o fornecedor é relatado corretamente como Nvidia em ambas as máquinas e aplicativos acelerados, como Compiz e glxgears, funcionam bem.

Alguma idéia do que tentar?

obrigado

Robin Elvin
fonte

Respostas:

6

Se você estiver usando glBegin () / glEnd () em seu código, especialmente se estiver definindo texturas e estados de forma redundante entre os quadros (ou seja, desenhe com textura 1, depois 2, então 1 e 2, em vez de 1,1,2, 2), você provavelmente está incorrendo em sobrecarga do driver. Especialmente esse é o caso se você perceber que um processador lento está sendo carregado enquanto ainda possui uma boa placa. O uso de glDrawArrays ou similar geralmente tem muito um desempenho melhor.

Sem uma lista de códigos completa, no entanto, não há realmente uma maneira de saber com certeza. O SDL é um invólucro bastante fino, portanto, a menos que você esteja fazendo algo realmente estranho, não esperaria um erro. Além disso, quais cartões estão sendo usados?

ChrisE
fonte
O cartão nesta máquina é uma nVidia Corporation GT218 [ION]. Eu entendo que vai demorar um pouco antes de otimizar, mas não tão devagar. Estou ligando 1 textura e usando-a para desenhar um campo de altura simples, reconhecidamente de 1 triângulo por vez. É uma maneira horrível de fazer as coisas, mas mesmo assim, mais devagar do que o esperado.
22611 Robin Elvin
11
Acabei de receber as chamadas glBegin () / glEnd () fora do loop e ajustou a rotina de desenho de acordo e a taxa de quadros é de até 30fps. Então, eu percebi o efeito drástico que essas chamadas causam quando usadas imprudentemente :) Obrigado!
22611 Robin Elvin
Sem problemas. Ainda bem que pude ajudar.
ChrisE
@ Chrisis O que você quer dizer com "SDL é um invólucro muito fino"?
31512 Chris