Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Sujets - NuriYuri

Pages: [1]
1
Graphique / [VSYNC] Framerate instable
« le: Mai 10, 2018, 03:03:38 pm »
Bonjour, j'utilise SFML pour un de mes projets (liteRGSS) et sous Windows j'ai constaté divers problèmes de framerate dont je ne suis pas le seul à souffrir.

Le VSYNC ne fonctionne pas correctement et seul SFML est affecté par ce soucis (j'ai essayé des applications sous SDL2 et elles n'ont pas de problème). J'ai aussi voulu voir si c'était pas ma programmation qui était foireuse et il s'avère que non, un projet compilé sous VS (au lieu de MinGW) affichant rien souffre du même problème.

Code utilisé :
int main()
{
sf::RenderWindow window(sf::VideoMode(640, 480), "My window", sf::Style::Close | sf::Style::Titlebar);
sf::Clock clk = sf::Clock();
window.setVerticalSyncEnabled(true);

while (window.isOpen())
{
// check all the window's events that were triggered since the last iteration of the loop
sf::Event event;
while (window.pollEvent(event))
{
// "close requested" event: we close the window
if (event.type == sf::Event::Closed)
window.close();
}

// clear the window with black color
clk.restart();
window.clear(sf::Color::Black);
printf("\r%lld", clk.getElapsedTime().asMicroseconds());
clk.restart();
// draw everything here...
// window.draw(...);

// end the current frame
window.display();
printf("\t%lld", clk.getElapsedTime().asMicroseconds());
}

    return 0;
}

Description des screenshot réalisés :
  • sc1.png : Application lancée avec le chipset graphique (défaut) et souffrant du problème de FPS, la fonction display() prend 30ms à s'exécuter au lieu de 16.
  • sc2.png : Application lancée avec la carte graphique (Nvidia Geforce 750M), la fonction clear() dure 16ms alors que ce n'est pas du tout à elle de réaliser l'équilibrage de FPS (conséquence s'il y a des graphismes affichés le framerate descend vu que display() va prendre plus de temps).
  • sc3.png : Application non fermée (donc toujours avec la carte graphique) mais après avoir ouvert le gestionnaire des tâches. Plus de problème de framerate, par contre, je suis le seul parmi mes utilisateurs à pouvoir régler le soucis en ouvrant le gestionnaire des tâches, d'autres c'est en mettant le jeu en fullscreen, d'autres c'est avec le mixeur de volume et d'autres n'ont pas de solutions.
  • sc4.png : Application lancée avec le chipset graphique et youtube d'ouvert dans le navigateur : framerate renvoyé autour de 60FPS mais pas très stable. Fermer youtube a pour conséquence de renvoyer au résultat de sc1.png (c'est pas toujours le cas).

Ce problème est très gênant car le VSYNC est le seul moyen d'avoir un affichage fluide (mon moteur sert à afficher des jeux RPG Like du coup le défilement de la carte doit être le plus fluide possible), en utilisant setFrameLimit() au lieu du VSYNC ça affiche à entre 58 et 61 FPS ce qui est inacceptable au vu du critère de fluidité qui n'est pas respecté (il ne doit pas y avoir d'accouts quand on se déplace).

Note complémentaire : Je suis sur Windows 10 et à jour.

Pages: [1]
anything