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

Auteur Sujet: [RESOLU] ma sf::window ne semble pas bénéficier de l'accélération matériel  (Lu 2199 fois)

0 Membres et 1 Invité sur ce sujet

Pr4xis

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Bonjour !
Félicitations pour cette interface très intuitive et propre que je prends plaisir à exploiter.

J'ai décidé d'apprendre à me servir de l'API OpenGL (en version 4+) avec le système de fenêtrage de la SFML, mais après avoir implémenté dans ma boucle une mise à jour de mon tableau de vertex, je lance la compilation et observe avec horreur un rafraichissement de l'ordre d'une image par seconde, je m'empresse de coller un cout dans la boucle pour m'apercevoir qu'elle tourne pourtant à la vitesse prévue : 60 itérations/sec, je tente ensuite de voir ce que Fraps pourrait me dire mais rien à faire il ne m'affiche pas le framerate et ne m'enregistre rien alors que sur mes autres appli OGL/DX il opère correctement, je me demande alors si OpenGL ne serai pas en train de se tourner les pouces.

Voici une version compressée qui donne le résultat insatisfaisant énoncé ci-dessus :

(click to show/hide)

Après d'innombrables tests et remaniements de codes infructueux je crée un nouveau projet pour tester un code minimal et je vois que Fraps reste toujours muet.

Le code (celui du tuto de votre site)

(click to show/hide)

Infos:
* Environnement :
 - Windows 7 Pro 64Bits & SP1
* IDE :
 - Code::Blocks 13.12 (le dernier en date) paramétré pour utiliser le compilateur GCC 5.1 et donc le C++14 ainsi que les lib et API suivantes.
* Lib & API (correctement reconnus par le linker de C::B d'après son debuggeur qui reste muet à la compilation) :
 - SFML 2.3.1     compilé  pour tourner sur mon compilo (linker : sfml-graphics, sfml-window et sfml-system)
 - GLEW 1.13.0     "                       "                       "     (linker : libglew32)
 - OpenGL (linker : opengl32)
 - Lib Dynamiques : copiées dans les répertoires bin du projet C::B
 - Dossiers include (.h) : définis
* Matériel :
 - processeur Intel Core i5 670 @ 3.47GHz
 - Carte graphique AMD Radeon HD 6800 Series
 - Mémoire 2 * 4Go DDR3
 - Moniteur principal : 24" en 1920*1080 (pas de soucis de framerate).
 - Moniteur secondaire : 24" 1920*1200 (pas de soucis de framerate et mon application de base donne le même résultat sur celui-ci).
* Pilote Graphique à jour (vérifié à l'instant: 08/09/15 18h) : 15.20.1062.1003-150728a1-187447C

Fraps devrait t-il fonctionner sur une sf:window de la SFML ?
Comment s'assurer qu'OpenGL opère bien si ce n'est en contrôlant la présence du framerate de fraps dans la fenêtre ?
Et pour finir :
Est-ce que cette histoire de sf::window.display() qui ne se lance pas à chaque tour de boucle mais une fois par seconde vous parle ? Je peux vous fournir le code (en essayant de l'alléger/éclaircir le plus possible) mais ça risque de faire un peu long surtout que le problème se situe peut-être au tout début du projet.

En vous remerciant  :D

Edition (19h30) : J'ai intégré le code bugué dans le post.
« Modifié: Septembre 09, 2015, 02:30:26 pm par Pr4xis »

victorlevasseur

  • Full Member
  • ***
  • Messages: 206
    • Voir le profil
Re : [SFML 2.3.1] ma sf::window ne semble pas prendre en charge OpenGL
« Réponse #1 le: Septembre 08, 2015, 07:58:44 pm »
Je crois que tu n'as pas demandé explicitement un contexte OpenGL 4 (donc tu ne sais pas quelle version d'OpenGL tu obtiens).
http://www.sfml-dev.org/documentation/2.0-fr/structsf_1_1ContextSettings.php#details

Pr4xis

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : [SFML 2.3.1] ma sf::window ne semble pas prendre en charge OpenGL
« Réponse #2 le: Septembre 08, 2015, 08:16:42 pm »
J'ai modifié le code en mettant ceci :

sf::Window window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, sf::ContextSettings(24,8,2,4,3));
 

Pas de changements  :-\


C'est étrange, si je rajoute dans la boucle
sf::sleep(sf::seconds(1.0f));
 
L'intervalle des sf::Window.display() semble le même  :o
« Modifié: Septembre 08, 2015, 09:47:00 pm par Pr4xis »

victorlevasseur

  • Full Member
  • ***
  • Messages: 206
    • Voir le profil
Re : [SFML 2.3.1] ma sf::window ne semble pas prendre en charge OpenGL
« Réponse #3 le: Septembre 08, 2015, 08:19:29 pm »
Après, SFML tente de trouver le contexte le plus proche de ce que tu lui demandes (ce n'est pas forcément le même).
Tu peux avoir les paramètres "définitifs" en récupérant un sf::ContextSettings avec la méthode getSettings() de sf::Window. Quels sont-ils ?

Pr4xis

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : [SFML 2.3.1] ma sf::window ne semble pas prendre en charge OpenGL
« Réponse #4 le: Septembre 08, 2015, 08:24:14 pm »
Alors en précisant les versions d'openGL j'ai pour résultat ce que j'ai spécifié et si je ne précise pas j'ai la même chose pour la version majeure, c'est à dire 4

--------------
Ajout :

Je me rends compte que si j'ai un rendu à l'écran (même saccadé) c'est qu'OpenGL doit forcement tourné vu que les modules SFML graphique et de fenêtrage sont des surcouches à l'API (dépendants de opengl32 entres autres), si je ne me trompe pas ?

La source de mon embrouille est l'absence du compteur de fraps, vu que ce logiciel affiche son compteur sur toute fenêtre opengl ou directX, que je ne le vois pas et que ma sf::window ne s'exécute pas à chaque boucle j'ai commencé à me dire que peut-être je ne bénéficiais plus de l'accélération matériel.

Je viens de tester le code exemple pour un moteur à particules simplifié que j'ai copier coller depuis le tuto "Concevoir ses entités avec les tableaux de vertex" et là par contre l'animation est fluide (et fraps n'affiche tout de même pas son compteur).
Je précise qu'il fonctionnait auparavant, mais du coup l'absence de son affichage n'est à imputer ni à SFML ni au code et mon soucis se réduit à :
L'animation de ma sf::Window tourne à environ 1 FPS au lieu de 60fps (avec pourtant sa boucle qui tourne bien 60 fois par seconde).
« Modifié: Septembre 09, 2015, 02:42:17 am par Pr4xis »

Pr4xis

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Problème réglé !

mon générateur déterministe doit être placer à l'extérieur de la boucle principale sinon les valeurs reste les mêmes tant que la graine n'est pas mise à jour (une fois par seconde) , en dehors de la boucle la graine n'est pas mise à jour et les valeurs changent à chaque tour de boucle, je n'ai pas encore trop compris pourquoi.

Merci pour votre temps, à la prochaine  :)