Obtenir l'accélération matérielle OpenGL avec SDL sous Linux


8

J'essaie d'utiliser SDL + OpenGL mais je ne pense pas que l'accélération matérielle fonctionne parce que le taux de rafraîchissement pour environ 18000 polys est d'environ 24 images par seconde sur une machine à quatre cœurs mais est désespéré de 1 à 2 images par seconde sur un Intel Atom. Même le quad core commence à se débattre lorsque le nombre de poly dépasse ce niveau.

J'ai vérifié mon code mais il me manque clairement quelque chose d'évident. J'ai changé mon code d'initialisation SDL pour utiliser le même code que dans le test SDL OpenGL . Il signale que SDL_GL_ACCELERATED_VISUAL est 1 mais que hw_available dans SDL_VideoInfo est 0

Le fournisseur est également signalé correctement comme Nvidia sur les deux machines et les applications accélérées telles que Compiz et glxgears fonctionnent bien.

Des idées sur quoi essayer?

Merci

Réponses:


6

Si vous utilisez glBegin () / glEnd () dans votre code, en particulier si vous définissez des textures et des états de manière redondante entre les cadres (c'est-à-dire, dessinez avec la texture 1, puis 2, puis 1, puis 2, par opposition à 1,1,2, 2), vous subissez probablement des frais généraux de pilote. C'est particulièrement le cas si vous remarquez qu'un processeur lent est en train de bouger alors qu'il a toujours une bonne carte. L'utilisation de glDrawArrays ou similaire a généralement beaucoup meilleures performances.

Sans une liste complète de codes, cependant, il n'y a vraiment aucun moyen de le savoir avec certitude. SDL est un wrapper assez mince, donc à moins que vous ne fassiez quelque chose de vraiment bizarre, je ne m'attendrais pas à une erreur. De plus, quelles cartes sont utilisées?


La carte de cette machine est une nVidia Corporation GT218 [ION]. Je comprends que ça va être un peu lent avant d'optimiser mais pas aussi lentement. Je lie 1 texture et je l'utilise pour dessiner un champ de hauteur simple, certes, d'un triangle à la fois. Donc, une façon assez horrible de faire les choses, mais même plus lentement que prévu.
Robin Elvin

1
Je viens de prendre les appels glBegin () / glEnd () en dehors de la boucle et d'ajuster la routine de tirage en conséquence et la fréquence d'images est jusqu'à 30 images par seconde. J'ai donc pensé à quel effet drastique ces appels font lorsqu'ils sont utilisés à mauvais escient :) Merci!
Robin Elvin

Aucun problème. Heureux d'avoir pu aider.
ChrisE

@ChrisE Que voulez-vous dire par "SDL est une enveloppe assez mince"?
Chris
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.