J'essaye dans une application WinAPI utilisant opengl de limiter les fps (de la même façon que Mateo avec la SDL). J'ai réussi mais les fps ne sont pas ce qu'il devrait être, par exemple avec un délai de 20 ms entre chaque rafraichissement, au lieu d'avoir 50 fps, je me retrouve avec 32 fps.
switch(message) { //Création case WM_CREATE: //Ouverture du fichier d'erreur
EcrireErreur ("Debut de l'enregistrement des erreurs.\n");
//Creation et initialisation des contextes if(!CreateAndSetupDC(hwnd, MyDC, MyRC)) {
EcrireErreur ("Class FctRappel, WM_CREATE : échec de la fonction CreateAndSetupDC.\n"); exit(EXIT_FAILURE); }
//Creation du monde :), c'est beau
MyWorld = new World ();
//Creation d'une entite de test
MyWorld->AddEntity ("Test.obj"); break;
case WM_PAINT:
CurrentTime = GetTickCount ();//Mise à jour du temps courant
//Rafraichissement du monde si besoin est. if(CurrentTime - LastRefresh > 20) {
MyWorld->ReDrawWorld (MyDC);
MyWorld->MoveWorld (Facteur);
LastRefresh = CurrentTime;
NextFPS ++; }
//Calcul des fps if(CurrentTime - Last5Second > 200) {
CurrentFPS = NextFPS * 5;//Nouveau fps
NextFPS = 0;//Mise à 0 des prochaine fps
Last5Second = CurrentTime;//Mise à jour de la seconde
Facteur = (float)60 / CurrentFPS;//les fps de references sont 60 } break;
case WM_KEYDOWN: switch(wParam) { case VK_UP://Fleche haut break; case VK_DOWN://Fleche bas break; } break;
//Destruction case WM_DESTROY: delete MyWorld; //Destruction des contextes
wglMakeCurrent(NULL, NULL); if(MyRC)
wglDeleteContext(MyRC);
ReleaseDC(hwnd,MyDC);
EcrireErreur ("", true);//Ferme le fichier d'erreur
PostQuitMessage (0); break;
int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance,
LPSTR lpszArgument, int nFunsterStil) { //Variables
MSG messages;
MySharedData.g_hMyHinst = hThisInstance;
//Recuperation de la resolution et des options if(!Initialisation (&MySharedData.iLargeur, &MySharedData.iHauteur)) {
ShellExecute(NULL, "open", "3dExplorer Option.exe", NULL, NULL, SW_SHOWNORMAL); exit(EXIT_SUCCESS); }
//Création et enregistrement de la classe if(!RegisterClass()) {
EcrireErreur ("Class main, Aucun : échec de la fonction RegisterClass.\n"); exit(EXIT_FAILURE); }
//Création de la fenêtre principale
MySharedData.g_hMyHwnd = CreateWindowEx (0, "3dExplorer", "3dExplorer", WS_CAPTION| WS_SYSMENU| WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
CW_USEDEFAULT, CW_USEDEFAULT, MySharedData.iLargeur, MySharedData.iHauteur, HWND_DESKTOP, NULL, hThisInstance, NULL);
//Placage de la camera
gluLookAt (0, 0, 60, 0, 0, 0, 0, 1, 0);
//Affichage de toutes les entité
DrawAllEntity ();
//Rafraichissement
SwapBuffers(MyDC); }
Limitation de FPS fonctionnant aléatoirement
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.