Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [SFML 2] Obtenir le nombre de FPS  (Lu 18212 fois)

0 Membres et 1 Invité sur ce sujet

Kromah

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
    • E-mail
[SFML 2] Obtenir le nombre de FPS
« le: Avril 11, 2012, 03:17:26 pm »
Bonjour,
pour des raisons de compatibilité, j'ai du m'orienter vers SFML 2.0.
Je découvre peu à peu les nouveautés de certaines classes, et j'ai été surpris de remarquer que la fonction sf::Window::GetFrameTime() avait disparue. Je ne parviens pas à trouver son équivalent. Faut-il le calculer nous-même à l'aide d'un Clock?

Merci d'avance  :D

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2] Obtenir le nombre de FPS
« Réponse #1 le: Avril 11, 2012, 03:30:50 pm »
Citer
Faut-il le calculer nous-même à l'aide d'un Clock?
Oui. C'est en fait peu surprenant une fois que tu réalises que ça se code en une ligne :)

sf::Clock clock;
while (window.isOpen())
{
    ...

    sf::Time frameTime = clock.restart();
}
Laurent Gomila - SFML developer

Kromah

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
    • E-mail
Re : [SFML 2] Obtenir le nombre de FPS
« Réponse #2 le: Avril 11, 2012, 03:35:55 pm »
Compris, merci pour l'intérêt particulier que tu portes au forum, c'est vraiment agréable  ;D

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : [SFML 2] Obtenir le nombre de FPS
« Réponse #3 le: Avril 11, 2012, 06:28:51 pm »
Laurent : pour être précis, je les coder avec u peu moins de dix lignes (et non une seul :p).

Pour te conseiller voici ce que j'ai fait :

Tu récupères le nombre de fois que t'a fait un display .
Une fois que t'arrive à une seconde, ce nombre de fois deviendra ton FPS :)

Après, à toit de gérer tout sa :p .

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2] Obtenir le nombre de FPS
« Réponse #4 le: Avril 11, 2012, 08:25:28 pm »
Bah, 1 / time marche pareil (surtout maintenant que SFML 2 a retrouvé une résolution sub-milliseconde), ça prend moins de code et au moins t'as pas à attendre une seconde pour que le FPS soit mis à jour.
Laurent Gomila - SFML developer

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : [SFML 2] Obtenir le nombre de FPS
« Réponse #5 le: Avril 11, 2012, 10:02:54 pm »
Sauf que là ben j'obtient des valeurs assés aux hasard j'ai envie de dire.

Voici le code :

m_clock.restart();
float framerate = 1 / (m_clock.getElapsedTime().asMillisecond() * 0.001);
std::cout << framerate << std::endl;

Bien entendu tout ceci est mis dans une boucle.

Voici ce que j'obtient à la fin :

13
62
52
62
62
62
62
58
62
62
12
62
62
62
62
62
62
62
62
62
18
62
62
62
62
62
62
58
62
62
15
62
62
62
62
62
62
62
62
62
20
62
62
62
62
62
62
62
62
43
16
62
62
62
62
62
62
62
62
58
16
40
62

La liste peut continuer encore longtemps :) . De plus, j'ai bien mis un framerate Limit à 60 FPS.

Merci d'avance :) .

Lo-X

  • Hero Member
  • *****
  • Messages: 618
    • Voir le profil
    • My personal website, with CV, portfolio and projects
Re : [SFML 2] Obtenir le nombre de FPS
« Réponse #6 le: Avril 11, 2012, 11:25:47 pm »
là tu restart la sf::Clock et tu récupère la valeur depuis le dernier restart à la ligne suivante. Ce que tu récupère c'est le temps écoulé entre les deux lignes

restart() revoie la valeur du chrono, ça revient à faire un getElapsedTime() puis un restart().

sf::Time frameTime = clock.restart();
float framerate = 1 / (frameTime.asMillisecond() * 0.001);
std::cout << framerate << std::endl;

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2] Obtenir le nombre de FPS
« Réponse #7 le: Avril 11, 2012, 11:30:18 pm »
Et... ça rime à quoi de faire asMilliseconds() * 0.001 ? :P
Laurent Gomila - SFML developer

Orwel

  • Full Member
  • ***
  • Messages: 208
    • Voir le profil
Re : [SFML 2] Obtenir le nombre de FPS
« Réponse #8 le: Avril 12, 2012, 12:06:09 am »
Je pense que comptait le nombre de display est mieux, car quand on affiche un FPS supérieur à 1000 dans des test, c'est imposible à lire.

Citer
Et... ça rime à quoi de faire asMilliseconds() * 0.001 ?
Il transforme le temps depuis des Milisecons vers des secondes. Après, un petit tours sur la documentation ne fait jamais de mal  ::)

Sinon la question:
Pourquoi les valeurs sont bizarres???
Elle sont régulières, parfois une baisse de framerate, certainement dû à l'affichage en console.

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : [SFML 2] Obtenir le nombre de FPS
« Réponse #9 le: Avril 12, 2012, 07:33:41 am »
Oui j'avais mis le restart à la fin (c'est un code équivalent à mon vrai code). Pourquoi en milliseconde ? Car mon EventManager compte en milliseconde (mon code est bien plus complexe que sa et j'ai essayer de mettre un code équivalent : codé le soir sa ne me réussis pas x) ). Brefs tu vois maintenant pourquoi c'est mieux de compter le nombre de display : sa ne peut se tromper ;) .

ps : merci mais je sais lire une doc et sais que les secondes existent x) . Dans mon code seulement, j'ai choisis de tout mettre en milliseconde (c'est pas uniquement le framerate ;) ).

Orwel

  • Full Member
  • ***
  • Messages: 208
    • Voir le profil
Re : [SFML 2] Obtenir le nombre de FPS
« Réponse #10 le: Avril 12, 2012, 08:00:06 pm »
Citer
Oui j'avais mis le restart à la fin (c'est un code équivalent à mon vrai code). Pourquoi en milliseconde ? Car mon EventManager compte en milliseconde (mon code est bien plus complexe que sa et j'ai essayer de mettre un code équivalent : codé le soir sa ne me réussis pas x) ). Brefs tu vois maintenant pourquoi c'est mieux de compter le nombre de display : sa ne peut se tromper ;)

unsigned int framerate = 1000 / frameTime.asMillisecond() ;ou unsigned float framerate = 1 / frameTime.asSeconds();
Dans ce cas, ceci peut-être plus simple  ;)
Désoler si tu l'a mal pris, je suis le premier à affirmer sans regarder la documentation. Cette réplique était plus tourné vers moi :-[

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : [SFML 2] Obtenir le nombre de FPS
« Réponse #11 le: Avril 12, 2012, 08:59:39 pm »
Ne t'inquiète pas pour sa :p . Brefs, qui est la vrai version ? Mesurer les FPS directement, avec les time en une seul ligne de code, où bien compter le nombre de display ? Je pense que les deux sont correctes, mais c'est vrai que votre version semble plus précise et sera surement celle qui devra être retenu.

danman

  • Hero Member
  • *****
  • Messages: 1121
    • Voir le profil
    • E-mail
Re : [SFML 2] Obtenir le nombre de FPS
« Réponse #12 le: Avril 12, 2012, 11:11:28 pm »
Ca dépend de si tu veux mesurer la vitesse instantanée de l'affichage ou la vitesse moyenne sur un échantillon d'une seconde, ça reste une valeur de référence.

Généralement on mesure plutot la vitesse instantanée, de la même manière qu'une voiture qui roule a un certain moment a 90 km/h ne fera pas forcément 90km en une heure, ce qui nous intéresse est la vitesse à cet instant T et pas la distance parcouru au final avec du coup la vitesse moyenne pour réaliser cette distance en un temps t .
Pointilleur professionnel

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2] Obtenir le nombre de FPS
« Réponse #13 le: Avril 12, 2012, 11:16:59 pm »
M'enfin, le FPS c'est juste une petite info qu'on affiche dans le coin de la fenêtre pour jauger vite fait des performances de l'appli, alors l'une ou l'autre méthode... clairement, on s'en fout ;D
Laurent Gomila - SFML developer

gaulois94

  • Sr. Member
  • ****
  • Messages: 259
    • Voir le profil
Re : [SFML 2] Obtenir le nombre de FPS
« Réponse #14 le: Avril 13, 2012, 11:56:51 am »
Laurent : ceci peut être intéressant pour les déplacements d'un personnage dans un jeu :) . Danman : je comprends parfaitement et vais donc choisir la méthode de calcule du FPS à un instant T :)