Lenteur selon processeur

Signaler
Messages postés
116
Date d'inscription
dimanche 26 septembre 2004
Statut
Membre
Dernière intervention
13 février 2008
-
Messages postés
116
Date d'inscription
dimanche 26 septembre 2004
Statut
Membre
Dernière intervention
13 février 2008
-
Bonjour à tous je développe actuellement un jeu en OpenGL et C, tout ceci marchait bien sur différents PC jusqu'à ce que j'effectue plusieurs changements majeurs dans le code. Au fur et à mesure des test sur le PC de développement (P4 2,8GHz Geforce 440 GO) tout semble s'améliorer, j'ai un gain de FPS et le chargement du jeu est plus rapide même si j'ai rajouté des choses (fichier log, chargement de lumières et caméras à partir d'un fichier ASE...). Le problème est le suivant, tout fier de mes nouvelles optimisation, je vais tester le jeu sur un PC ancien sur lequel celà fonctionnait auparavant, et là il me faut 3minutes de chargement (contre 1s sur le PC de développement) et il m'est impossible de jouer car j'ai une image toutes les 3 à 4 secondes, alors que pour le même jeu lors du test précedant ce vieux coucou tournait qd même à 30-40 fps. Les données du problème sont :
- Je ne sais pas à partir de quel changement ça a commencé à ralentir sur certains PC, je serais incapable de revenir pas à pas en arrière, le travail est d'ampleur trop importante.
- Le PC ancien est un HP Celeron 733Mhz avec carte graphique HP et 128 de RAM mais ce n'est pas un cas isolé, sur un Dell P3 1Ghz CG ATI 32MO et 512 de RAM j'ai le même ralentissement.
- Le ralentissement est global, même aux endroits du jeu ou je n'est RIEN changé de significatif. Mes modifications se situent en grande partie au chargement du jeu.

J'ai pensé que le programme consommait trop de mémoire, mais j'ai la même quantité de RAM sur mon PC de développement (512).
Alors je pencherais sur du code qui ne convient pas bien aux anciennes générations de processeurs.
Ma question est donc la suivante : Y'a-til des choses à éviter en langage C qui sont incompatible avec les anciens processeurs ?

Merci d'avance.

["http://www.rc-bot.com" ]

3 réponses

Messages postés
101
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
1 novembre 2007

Salut, peut tu expliqué un petit peu plus les modifications apporté ?

Par exemple tu parle de fichier log ... a quel moment l'ecriture intervient ? a tu vérifié que tu aurais pas laissé a tout hazard l'ecriture d'une ligne en debut de la procedure repaint ? ... c'est juste une idée

Tu parle de lumière .... est ce qu'a un moment ou tu n'en utlise aucune (je ne parle pas de l'influence mais vraiment de l'utlisation) tu as aussi les ralentissements ?

Sur ton pc de developpement tu as essayé la version compilé je pense, et ca marche vraiment sans problème ...

Pour les caméra des fichiers ASE désolé :( (je me suis toujours servit d'un seul point de vu)
Messages postés
116
Date d'inscription
dimanche 26 septembre 2004
Statut
Membre
Dernière intervention
13 février 2008

Pour ce qui est des modifications, c'est au chargement du jeu, je lit maintenant un fichier .ASE contenant des coordonnées de lumière, et de caméras, je stock ceux-ci dans des structures dont j'alloue dynamiquement l'emplacement mémoire (malloc au début puis realloc) au fur et à mesure des "découvertes" que je fais dans le fichier ASE. Je n'ai pas changé pour l'instant le chargement des modèle 3D, c'est toujours du OBJ et ça fonctionne depuis le début.
J'avais le même nombre de lumière avant les modifs (2) et j'ai juste modifié la fonction qui replace ces lumières au bon endroit à chaque frame:

void S3DSetLightsPos(void){
    int i,GLLIGHT[8];
    GLLIGHT[0]=GL_LIGHT0;
    GLLIGHT[1]=GL_LIGHT1;
    GLLIGHT[2]=GL_LIGHT2;
    GLLIGHT[3]=GL_LIGHT3;
    GLLIGHT[4]=GL_LIGHT4;
    GLLIGHT[5]=GL_LIGHT5;
    GLLIGHT[6]=GL_LIGHT6;
    GLLIGHT[7]=GL_LIGHT7;
    for(i=0;i<nblights;i++){
        glLightfv(GLLIGHT[i], GL_SPOT_DIRECTION,light[i].dir); 
        glLightfv(GLLIGHT[i], GL_POSITION,light[i].pos);
    }
}

Je pense pas qu'une fonction de ce type puisse ralentir le jeu d'autant qu'elle existait avant avec des paramètres codés en dur pour light[i].dir et light[i].pos.

J'ai bien vérifé que mon fichier log n'est pas écrit à chaque repaint ni a aucun endroit où il ne doit pas.

Pour l'affichage du chargement je n'ai pas encore de lumière d'activée et il y a encore ce ralentissement.

Pour les tests j'utilise toujours les dernières versions que je viens de compiler, et ça fonctionne sans problème sur mon PC de développement ainsi que sur tous les PC récents (fixe ou portable) le problème survient uniquement sur les anciens pros (P3 Celeron ...) indépendemment de la quantité de RAM.

S'il faut encore des détails n'hésite pas, j'en ai volontairement pas donné bcp au début car je voulais d'abord m'assurer qu'il n'y avait pas de mise en garde connues sur les anciens pross.

["http://www.rc-bot.com" ]
Messages postés
116
Date d'inscription
dimanche 26 septembre 2004
Statut
Membre
Dernière intervention
13 février 2008

J'ai encore cherché dans la journée je ne comprends pas. Je ne sais pas trop de quel coté chercher.

["http://www.rc-bot.com" ]