C# et DirectX Managed -- pb de FPS -- - C#/.NET managed - Programmation
Marsh Posté le 27-10-2005 à 16:57:16
tu dessines dans le OnPaint() de la fenêtre ?
Marsh Posté le 27-10-2005 à 18:52:55
Non, dans une méthode Render() que j'ai faite mais ca change rien quand je le met dans le OnPaint().
Marsh Posté le 27-10-2005 à 18:55:33
poste donc le code, parce que là, on est aveugles
Marsh Posté le 28-10-2005 à 11:12:28
Je vous mets un bout de code mais je sais pas si ca va vous aider beaucoup.
La boucle principale (dans le main) :
Code :
|
La création du device (dans le GraphicForm qui hérité de Windows.Form) :
Code :
|
et la méthode Render () :
Code :
|
Certaines partie du code sont encore en test donc tout n'est peut etre pas très bon
Marsh Posté le 28-10-2005 à 13:32:59
1) le DoEvents ne doit pas être dans le render mais dans la boucle générale.
2) tu est à 85Hz ?
Marsh Posté le 28-10-2005 à 17:12:57
1) Alors en fait pour le DoEvents(), il était avant dans le main, mais j'ai préféré le mettre dans le Render(). En effet, le jeu et le moteur 2D sont deux projets séparés et le formulaire contenant le device Dx est dans le moteur 2D et donc je préfère mettre le DoEvents() dans le moteur aussi.
2) Alors j'étais en 60 Hz, bloqué à 40fps, je me suis mis en 85Hz, le fps est monté entre 50 et 60fps. Plusieurs trucs, d'abord, je comprend pas comment le taux de rafraichissement influe sur le fps, le second truc, c'est qu'à priori ça a pas résolue le pb. Mais c'est peut etre la bonne piste.
Marsh Posté le 28-10-2005 à 19:56:16
Lord_SoniK a écrit : |
un moniteur à 85 Hz affiche 85 fps maxi.
Marsh Posté le 28-10-2005 à 20:53:00
tes PresentParameters sont par défaut en synchro avec le retour balayage.
Marsh Posté le 29-10-2005 à 15:12:48
Bon, j'ai modifié le paramètre présentationIntervalle ou un truc dans le style, je l'ai mis à immediate. J'ai maintenant environ 400 de fps sur mon portable. Il faut que je le test sur mon pc de bureau pour voir si je suis bloqué à 400 ou si ca va bien a fond Je vous donne des nouvelles bientôt et merci pour tous ces conseils.
PS : Si c'est pas ça qu'il fallait chager prévenez moi
Marsh Posté le 26-10-2005 à 22:09:17
Bonjour à tous je suis en train de développer un petit moteur 2D pour faire un jeu et j'ai un soucis avec l'affichage. En fait mon FPS est "bloqué" à 40 fps. La structure générale du jeu est une boucle dans laquelle est appelé une méthode game.update() qui gère les inputs et le jeu et une méthode Render() qui effectue l'affichage de la scène 3D. Le Device de Direct3D est dans un formulaire et lorsque j'enlève le Application.DoEvents() je gagne 20 fps (logique puisque l'OS ne s'occupe plus de la fenêtre). Même résultat quand je passe en plein écran (logique aussi). Après avoir placé des timers un peu partout j'ai constaté que la méthode qui "bloque" est le Device.present(). Lorsque la fenêtre contenant le device n'est pas affichée par l'OS (quand elle est masqué par une autre fenêtre) le fps atteint 1200fps, ce qui me semble etre le fps normal non bloqué). enfin, dans les exemples du SDK de DirectX, le fps n'est pas bloqué. J'ai essayé de suivre le code et de comparer avec le mien mais les différences sont trop grande et je m'y perd.
Si quelqu'un a déjà eu mon problème ou sait comment le résoudre, ça m'aiderait beaucoup