Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1632 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Utiliser plusieurs libs graphiques : ne pas perdre de performances

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Utiliser plusieurs libs graphiques : ne pas perdre de performances

n°2222927
Profil sup​primé
Posté le 24-03-2014 à 08:35:42  answer
 

Salut,
 
je voudrais savoir s'il y a moyen de faire une boucle "a la main" en openGL. Je fais actuellement un programme qui permet de se lancer avec plusieurs interfaces graphiques differentes. Je passe donc dans les memes boucles que ce soit pour la SDL ou l'openGL.
Ceci dit, l'openGL a ses propres fonctions qui permettent d'afficher a l'ecran, de fixer les fps etc...
 
J'aimerais bien trouver un systeme permettant de ne pas utiliser a 100% d'un de mes coeurs de proc, que j'utilise la SDL ou l'openGL..
 
Merci pour votre aide :)

mood
Publicité
Posté le 24-03-2014 à 08:35:42  profilanswer
 

n°2222936
rufo
Pas me confondre avec Lycos!
Posté le 24-03-2014 à 10:21:24  profilanswer
 

J'ai pas trop compris ta question :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2222992
Profil sup​primé
Posté le 24-03-2014 à 15:32:25  answer
 

En gros c'est quoi l'opti pour pas utiliser le proc a 100% en faisant un while (1)..?

n°2222994
Terminapor
I'll see you rise.
Posté le 24-03-2014 à 15:38:20  profilanswer
 

Mettre un sleep entre chaque frames (au moins 1ms si tu bosses avec un delta time).


---------------
Perhaps you don't deserve to breathe
n°2223007
Profil sup​primé
Posté le 24-03-2014 à 17:17:21  answer
 

Mais du coup les évenements ne sont pas super bien catchés si je mets un sleep. La fonction (glut) glutMainLoopEvent() permettrait de ne pas utiliser le proc (sans bloquer cependant la boucle) mais au vue de mon code, cela ne fonctionne pas.
 

Code :
  1. 087 │ void            theGame(ILib *lib, Snake &snake, Event &s_event)
  2. 088 │ {
  3. 089 │   double        now;
  4. 090 │
  5. 091 │   print_all(lib, snake);
  6. 092 │   while (lib->getContinuer() == 1)
  7. 093 │     {
  8. 094 │       lib->gest_event();
  9. 095 │       now = lib->getTicks();
  10. 096 │       if (int(now) % int(s_event.getTime()) == 0)
  11. 097 │         {
  12. 098 │           if (do_event_game(lib, snake, s_event) == false)
  13. 099 │             break;
  14. 100 │           if (print_all(lib, snake) == false)
  15. 101 │             break;
  16. 102 │         }
  17. 103 │     }
  18. 104 │   lib->quitLib();
  19. 105 │ }


 
Ma méthode gest_event() de la lib openGL :
 

Code :
  1. 104 │ void                    my_openGL::gest_event()
  2. 105 │ {
  3. 106 │   glutMainLoopEvent();
  4. 107 │ }


 
Une idée ?

n°2223009
Terminapor
I'll see you rise.
Posté le 24-03-2014 à 17:40:51  profilanswer
 

glutMainLoopEvent() va traiter toutes les actions de ta fenêtre, quand tu va faire un truc sur ton programme (redimensionner une fenêtre, appuyer sur une touche, etc) toute ces actions sont stockées sur une pile, l'appel de glutMainLoopEvent dépile tout ça et va balancer / traiter les événements.
En quoi un sleep ferait que tes événements soient "pas super bien catchés" ? :??:
 
Là de ce que je vois, cette partie :  
 

Code :
  1. now = lib->getTicks();
  2. if (int(now) % int(s_event.getTime()) == 0)
  3. {
  4.     if (do_event_game(lib, snake, s_event) == false)
  5.         break;
  6.     if (print_all(lib, snake) == false)
  7.         break;
  8. }


 
Va mettre à jour tout ton truc qu'une fois sur s_event.getTime().
Normalement tu le fais tout le temps, en faisant passer le delta time (temps écoulé entre deux frames), tu règles ensuite les vitesses de tes objets en fonction de ce delta-time, une fois la maj faite, tu mets en pause ton programme au moins 1ms (ça permet un p'tit break sur ta CG / ton proco),ou sinon le nombre de milliseconde requise pour lock le framerate à une certaine valeur (genre tu veux 60FPS constant, t'as pris 4ms pour faire la MAJ/rendu, tu fais un sleep(12) ).


---------------
Perhaps you don't deserve to breathe

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Utiliser plusieurs libs graphiques : ne pas perdre de performances

 

Sujets relatifs
Userform avec plusieurs utilisateurs[PHP] Quelle API pour utiliser les données de localisation ?
image en surbrillance par plusieurs boutons meme pageRemplir plusieurs feuilles Excel
Extraction/copie de données selon plusieurs critères[C++] utiliser des classes dans mon code
utiliser une jauge de contrainte avec arduinoGraphiques 2D et 3D avec D
comment utiliser un parseur xmlPlusieurs images css
Plus de sujets relatifs à : Utiliser plusieurs libs graphiques : ne pas perdre de performances


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR