IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[MFC]Calculer les FPS


Sujet :

MFC

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [MFC]Calculer les FPS
    salut j'aimerais calculer les Frames/secondes de mon appli MFC (rendu 3D openGL).

    or la situation n'est pas la même que dans un moteur 3D ou tout est gérer par une boucle principale. Apparement, en MFC, si un évenement genre "la souris a bougé" ou "une fenêtre a été déplacé" la zone graphique n'est pas redessinée. or j'ai besoins de connaître le nombre de fois ou la fenêtre est redessiner.

    une piste, une info ?

    Inerti@

  2. #2
    mat.M
    Invité(e)
    Par défaut
    salut j'aimerais calculer les Frames/secondes de mon appli MFC
    Il faut calculer l'intervalle de temps et le nbre de frames/sec sera ( comme ça le laisse supposer ) le nombre d'images rendues dans la boucle de rendu par seconde , localisée dans la procédure de fenêtre et hors traitement messages ( c.a.d. le Thread principal de fenêtre qui boucle tout le temps )
    On peut utiliser GetTickCount ( inclure winmm.lib ) ou les classes CTime , CTimeSPan

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    localisée dans la procédure de fenêtre et hors traitement messages
    comprend pas trop

    tu veux dire que je lance simplement une boucle dans la fonction appelée par CVue:raw() et je fait mon calcul où faut comprendre autre chose ?

    Inerti@

  4. #4
    mat.M
    Invité(e)
    Par défaut
    Oui il faut calculer les frames dans ll'événément OnDraw , ou bien tout simplement définir un timer fixé à 1000 ms et effectuer le calcul
    Prendre exemple sur Cube du MSDN qui utilise le rendu Open GL
    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
     
    void CCubeView::OnTimer(UINT nIDEvent)
    {
    	DrawScene();
     
    	CView::OnTimer(nIDEvent);
     
    	// Eat spurious WM_TIMER messages
    	MSG msg;
    	while(::PeekMessage(&msg, m_hWnd, WM_TIMER, WM_TIMER, PM_REMOVE));
    }
     
     
    void CCubeView::OnDraw(CDC* pDC)
    {
    	CCubeDoc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
     
    	DrawScene();
    }

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    la fonction qui calcul les frames/seconde est au point.
    elle fonctionne elle est validé.


    mon dernier problème est le suivant.

    j'aimerais savoir si dans les MFC il y a une sorte de fonction Idle comme openGL, c'est a dire fonction qui indique à l'application ce quelle doit faire lorsque qu'il n'y a aucun action de l'utilisateur, etc ...


    j'ai essayer avec un timer comme dans la demo cube du msdn mais c'est pas bon j'obtient un certain framerate et si je bouge la souris mon framerate augmente, bref c'est pas très fiable.

    j'ai mis dans le menu de l'appli un menu à cocher "benchmark" qui active/desactive un booléen. Je dois simplement lancer en boucle le rendu de la scène 3D tant que ce booléen est vrai mais je galère, je ne sais pas quelle événement utiliser

    inerti@

  6. #6
    mat.M
    Invité(e)
    Par défaut
    Il y a CWinApp::OnIdle , voilà un exemple du MSDN :

    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
     
    BOOL CMyApp::OnIdle(LONG lCount)
    {
        BOOL bMore = CWinApp::OnIdle(lCount);
     
        if (lCount == 0)
        {
        TRACE("App idle for short period of time\n");
        bMore = TRUE;
        }
        else if (lCount == 10)
        {
        TRACE("App idle for longer amount of time\n");
            bMore = TRUE;
        }
        else if (lCount == 100)
        {
            TRACE("App idle for even longer amount of time\n");
            bMore = TRUE;
        }
        else if (lCount == 1000)
        {
            TRACE("App idle for quite a long period of time\n");
         // bMore is not set to TRUE, no longer need idle
         // IMPORTANT: bMore is not set to FALSE since CWinApp::OnIdle may
         // have more idle tasks to complete.
        }
     
        return bMore;
         // return TRUE as long as there is any more idle tasks
    }

    Je dois simplement lancer en boucle le rendu de la scène 3D tant que ce booléen est vrai mais je galère, je ne sais pas quelle événement utiliser
    Pour cela utilise le timer ou OnIDle comme indiqué précédemment , non ??

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    oui mais le timer on doit lui donner un delai d'éxécution ce qui ne m'arrange pas car je dois lancer en continue mon calcul.

    Je vais creuser cette méthode Idle

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC] Controler les splitter
    Par toune dans le forum MFC
    Réponses: 6
    Dernier message: 19/01/2005, 13h20
  2. [MFC] Intercépter les erreurs (WinInet)
    Par Kevgeii dans le forum MFC
    Réponses: 3
    Dernier message: 05/11/2004, 09h39
  3. Afficher les FPS
    Par p@rasiT dans le forum OpenGL
    Réponses: 5
    Dernier message: 04/10/2004, 15h15
  4. [MFC] dévier les messages de MESSAGE_MAP
    Par mychawel dans le forum MFC
    Réponses: 3
    Dernier message: 12/07/2004, 15h05
  5. Réponses: 6
    Dernier message: 04/01/2004, 21h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo