[DirectX] Framerate différent en fullscreen et windowed

Framerate différent en fullscreen et windowed [DirectX] - C++ - Programmation

Marsh Posté le 15-07-2004 à 20:00:57    

Voilà je prépare une interface graphique en 3d pour un logiciel et j'utilise pour cela directx9.
 
Tout se passe bien néanmoins j'ai un problème étrange avec le framerate de mon moteur.
 
Si je suis en mode "fullscreen" le moteur m'indique bien un framerate de 100 ou 101 images/secondes (mon ecran est en 100hz donc c bon) par contre en mode fenetré, il ne m'indique plus que la moitié, 48 ou 49 en général.
 
Ce framerate est juste déduit d'une valeur incrémentée à chaque image rendue et remis à zéro toute les secondes et je m'en sers pour synchroniser mes animations qui doivent être indépendante de ce framerate.
 
Donc voilà j'aimerais savoir si vous avez déjà eu ce cas de figure et qu'est ce que je peux faire, car j'aimerais bien que tant que le moteur n'effectue aucun rendu le framerate soit correct dans les deux situations, mais je ne vois vraiment pas d'ou cela peut venir.

Reply

Marsh Posté le 15-07-2004 à 20:00:57   

Reply

Marsh Posté le 15-07-2004 à 23:08:11    

Personne n'a une idée  :??:  :sweat:

Reply

Marsh Posté le 15-07-2004 à 23:35:26    

Tu es sûr de ton compteur ?
As-tu vérifiez la fréquence affiché par ton moniteur en mode windowed et fs ?
Au lieu d'utiliser un compteur, pourquoi ne pas faire une moyennne en utilisant QueryPerformanceCounter ?
Pour ma part, je n'ai pas vu de diff de perf en mode windowed et fullscreen. Cela dit, on peut faire du fullscreen en windowed sans pour autant l'activer : Les cartes ont un stretcher en hard.

Reply

Marsh Posté le 16-07-2004 à 00:19:01    

Alors oui je suis sûr de mon compteur, puisqu'il ne fait rien d'autre que d'etre incrémenté après chaque image rendue...Pour la fréquence elle est bien de 100hz que ce soit en windowed ou fullscreen.
 
Pour l'histoire de la moyenne ce n'est pas cela qui m'interesse, je dois avoir un framerate instantané puisque j'en déduis un facteur > ou < 1 selon la vitesse de rendue, pour permettre aux animations etc... de rester synchronisées quel que soit la vitesse de rendue de la machine.
 
Sinon effectivement je sais qu'on peut etirer la zone de la fenetre pour faire un faux fullscreen, c'est certainement ce qui sera fait au final d'ailleurs pour d'autres raisons (utilisations d'overlay, etc...) néanmoins mon problème est de savoir pourquoi ma boucle de rendue tourne pile à la moitié de la vitesse à laquelle elle devrait reellement tourner.
 
D'ailleurs c'est visible à l'oeil nu que le rendu est beaucoup moins fluide en windowed qu'en mode fullscreen...
 
Bref je sèche  :sweat:


Message édité par Profil supprimé le 16-07-2004 à 00:21:10
Reply

Marsh Posté le 16-07-2004 à 00:50:38    

Ah cool j'ai trouvé, je vais pas passer une nuit blanche  :bounce:  
 
Alors pour ceux que cela interesserait c'était un problème de synchronisation verticale...
 
En fait lorque j'initialise le device en mode fenetré j'utilisait D3DPRESENT_INTERVAL_DEFAULT qui est correct pour le mode fullscren (en général ca met le vsynch en marche par défaut) mais en mode fenetré cela déconnait...
Du coup j'ai mis D3DPRESENT_INTERVAL_ONE qui est toujours valide pour le mode fenetré et du coup plus de problèmes, mon framerate est correct désormais.

Reply

Marsh Posté le 16-07-2004 à 20:47:02    

Bon courage, moi je fais une interface graphique en OpenGL
:hello: !!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed