#0 

14-08-2011 12:52:58

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

Bonjour à tous,

Récemment, je suis mis a installer la distribution Ubuntu (Linux) qui entre parenthèse est vraiment très bien mais je ne suis pas ici pour parler Linux mais d'un problème que j'ai rencontré et que j'ai résolu a ma façon. Néanmoins je préfère poster ce topic afin de vérifier si je ne me suis pas trompé.

En compilant un programme Irrlicht très basique (Affichage d'une toute petite scene), je me rend compte que lors de l'exécution du programme en paramètrant la compilation en utilisant EDT_OPENGL, le nombre de FPS est tellement important que l'application rame.

Je m'explique, la méthode driver->getFps() me donne des valeurs dépassant les 2500 FPS.

Certe c'est bien beau tout cela sauf que cela freeze l'affichage.

Je me suis donc dit que le serveur X de Linux était peut être trop sollicité pour pouvoir rafraichir l'affichage de l'application et donc donnait une impression de "freez" .

J'ai eu bon vérifier si les librairies GLX (opengl) était bien installé ainsi que vérifier la version de mon driver NVIDIA mais rien n'y fait cela ne change pas.

Pour corriger le probleme j'ai donc simplement utilisé la methode device->getTimer()->getTime() pour pouvoir limité l'appel au smgr->DrawAll();

pour ce faire j'ai donc indiqué

if(lastTime + 10 < device->getTimer()->getTime() )    // OUI si un temps de 10 milliseconde se sont écoulé entre les deux tours de boucles
{
   ......
   smgr->drawAll();
   ......
   lastTime = device->getTimer()->getTime();
}

en empêchant d’appeler la méthode drawAll a chaque tour de boucle, l'application plafonne le nombre de FPS a une petite centaine et l'application ne "freez" plus

Ma question est donc la suivante :

Sous Windows et les drivers DIRECTX, je n'avais pas ce problème. D'ailleurs même en utilisant OPENGL.
La méthode que j'utilise est-elle bonne ? Avez vous rencontré ce même problème et si oui comment l'avez vous résolu ?


Merci d'avance pour les réponses

a+,

thoced

Hors ligne


#1 

14-08-2011 14:37:16

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 904
Corrections: 2
Site web

j'ai une ati, et les scene basic (exemple 26) je monte a 4000fps, mais je n'est jamais eux de freez, donc je pensse que c'est du au nouveaux server graphique qu'utilise unbutu
http://fr.wikipedia.org/wiki/Wayland
ou alors cela viens des effect spéciaux de gnome (composite), je t'invite a configurer ceci, comme desactive la syncronisation vertical

tout fois je n'utilise pas unbutu mais la slackware il ce peut que je me trompe
xfce+compiz+emerald .....

Hors ligne


#2 

09-12-2011 16:14:32

katsankat
Membre
Date d'inscription: 24-02-2007
Messages: 43

Salut j'arrive un peu tard mais oui la méthode est bonne, elle bride l'affichage à 100 FPS. Ce qui est largement suffisant puisqu'au-delà de 30 FPS c'est du gachis ça sollicite le système à fond pour rien.
L'autre méthode c'est de mettre un device->sleep(x ms) après le drawAll().

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
Analysé par
880 membres
1424 sujets
11113 messages
Dernier membre inscrit: mandrifidy
24 invités en ligne
Aucun membre connecté
RSS Feed