Impossible de réguler mon framerate à 60 FPS !
J'ai eu beau chercher, je vois pas du tout ou est le problème (passé ma soirée dernière et cette journée la dessus) !
Mon code main fonctionne très bien (le cube tourne sans problèmes, mais je suis à 1800 FPS et j'utilise mon cpu à 100%, donc pas très pratique.)
Le code :
Déclarations :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Uint32 last_time = SDL_GetTicks(); Uint32 current_time,ellapsed_time; Uint32 start_time;
Dans le while principale :
Ce code fonctionne en entier (donc pas seulement avec cet extrait).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 current_time = SDL_GetTicks(); ellapsed_time = current_time - last_time; last_time = current_time; angleZ += 0.05 * ellapsed_time; angleX += 0.05 * ellapsed_time; Dessiner(); ellapsed_time = SDL_GetTicks() - start_time; if (ellapsed_time < 10) { SDL_Delay(10 - ellapsed_time); }
Mais il semble que dès que je passe par un objet, ça fous le merdier.
(Et encore plus bizarre, quasiment la même classe fonctionne très bien en ruby, passé au C++, cela ne fonctionne plus... )
Et j'ai essayé : déclaration de la sdl dans le main, pas par l'objet, idem avec l'ouverture de la fenêtre.
Rien ne marche.
Par contre, si je remplace mon code par celui du sdz, ça passe :\
Je comprend plus rien.
Voici mon main :
De même, si je recopie ma version de gestion du framerate (float timing/fps et compagnie) dans le code du tuto du sdz, cela fonctionne. En toute logique mes déclarations fonctionnent donc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 //Basic preprocessor #include <iostream> #include <string> #include <SDL/SDL.h> #include <GL/gl.h> #include <GL/glu.h> #include <cstdlib> //Preprocessor for the engine // Fonctions and class #include "SDL_window.h" #include "SDL_timer.h" #include "dessiner.h" using namespace std; //Main int main(int argc, char *argv[]) { float timing = 1000.0, fps = 60.0; int frame = 0; SDL_window window; window.create_window(); // Open Window float angleZ = 0; float angleX = 0; dessin(angleZ, angleX); Uint32 last_time = SDL_GetTicks(); Uint32 current_time,ellapsed_time; Uint32 start_time; /////////////////////////////////////////////////////// while (true) { //===================================== current_time = SDL_GetTicks(); ellapsed_time = current_time - last_time; last_time = current_time; //===================================== window.cleargl(); // Nettoyage opengl window.key(); // Gestion d'évènement clavier/souris/joystick //Dessin angleZ += 0.05; angleX += 0.05; dessin(angleZ, angleX); //Dessin end window.refresh(); // Actualisation de l'écran frame++; // Incrémentation du nombre de frames //===================================== ellapsed_time = SDL_GetTicks() - start_time; if (ellapsed_time < (timing/fps)) { SDL_Delay((timing/fps) - ellapsed_time); } //===================================== } /////////////////////////////////////////////////////// window.quit(); // Termine la SDL return 0; } //End Main
NOTE : Pour le code du main.cpp, avec ou sans ajout du #include <cstdlib>, aucuns changements. De plus le code du SDZ fonctionne si je remplace cette déclaration préprocesseur par iostream.
[EDIT] j'avoue, ma méthode de limitation des FPS n'est pas ce qu'il y a de mieux, mais actuellement je n'ai pas trouvé mieux.![]()
Partager