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

DirectX Discussion :

Problème de nb d'images par seconde


Sujet :

DirectX

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 68
    Points : 34
    Points
    34
    Par défaut Problème de nb d'images par seconde
    Bonjour,

    J'ai fait une application qui tourne en mode fenetré avec Directx et la bibliothèque MFC...

    Je rencontre quelques problèmes de nb d'images par seconde...

    Lorsque je désactive l'affichage de tous les objets et que je n'affiche qu'un écran noir dans la fenêtre, je ne dépasse guère les 40 images/sec...

    Lorsque j'affiche tous les objets, je tombe à 20 images/sec

    Voici comment fonctionne en gros le programme (les fonctions sont très simplifiées) :

    // lorsqu'ils n'y a plus de messages à traiter, on lance un invalidate(FALSE);

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    BOOL CWinStars2App::OnIdle(LONG lCount) 
    {		
    	CWinApp::OnIdle(lCount);
    	// TODO: Add your specialized code here and/or call the base class
     
    	AfxGetMainWnd()->Invalidate(FALSE);		
     
    	return TRUE;
    }
     
    void CWinAppl::OnDraw(CDC* pDC)
    {
        CWinStars2Doc* pDoc = GetDocument();
        ASSERT_VALID(pDoc);
     
        render();    
    }
     
    bool CWinApp::Render()
    {
     
    _device->Clear(0L, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, 0x00000000, 1.0f, 0L);
     
    if (!FAILED(_device->BeginScene()))
    {
     
    _device->EndScene();
     
    }
     
    _device->Present(NULL,NULL,NULL,NULL);
    }
     
    bool Graphics::DefinitionMode(D3DPRESENT_PARAMETERS &d3dpp, int width, int height)
    {
    	// Get the current desktop display mode, so we can set up a back
        // buffer of the same format
        D3DDISPLAYMODE d3ddm;
        if(FAILED( _d3d9->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
        {
            return false;
        }
     
    	d3dpp.Windowed = TRUE;
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
        d3dpp.BackBufferFormat = d3ddm.Format;
        d3dpp.BackBufferWidth=width;
        d3dpp.BackBufferHeight=height;
        d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE;
        d3dpp.FullScreen_RefreshRateInHz=0;
        d3dpp.BackBufferCount=1;
     
     
        d3dpp.MultiSampleType=  D3DMULTISAMPLE_NONE;
     
        switch(Antialiasing)
        {
    	case 2 : d3dpp.MultiSampleType=  D3DMULTISAMPLE_2_SAMPLES; break;
    	case 4 : d3dpp.MultiSampleType=  D3DMULTISAMPLE_4_SAMPLES; break;
        }
     
        d3dpp.EnableAutoDepthStencil = TRUE;
        d3dpp.AutoDepthStencilFormat = D3DFMT_D16;// D3DFMT_D16 - D3DFMT_D24S8
     
    	return true;
    }
     
    bool Graphics::create(
                          HWND hwnd,
                          int width,
                          int height,
                          bool windowed)
    {
        // Create the D3D object.
        if((_d3d9 = Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
        {
            return false;
        }
     
        // Set up the structure used to create the D3DDevice
        D3DPRESENT_PARAMETERS d3dpp;
        ZeroMemory(&d3dpp, sizeof(d3dpp));
     
        if (!DefinitionMode(d3dpp, width, height)) return false;
     
        // Create the D3DDevice
        if(FAILED(_d3d9->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,
            D3DCREATE_SOFTWARE_VERTEXPROCESSING ,
            &d3dpp, &_device)))
        {
            return false;
        }   
     
        return true;
    }

    Qu'est-ce qui ne va pas ?

    Avec mes remerciements,

    Franck

  2. #2
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    Render on idle
    Laurent -- http://jeux-directx.com/

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 68
    Points : 34
    Points
    34
    Par défaut 64 images/sec max
    Bonjour et merci !!!

    Je viens de faire la modif mais la vitesse est toujours limité à 64 images par seconde (en n'affichant rien dans la scène !!! )

    Ce n'est vraiment pas énorme pour une GeForce 5200 FX !!!!!

    Ces mauvaises performances viennent-elles de l'utilisation des bibliothèques MFC ?

    Une idée ?

  4. #4
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    vsync
    Laurent -- http://jeux-directx.com/

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 68
    Points : 34
    Points
    34
    Par défaut vsync ?
    Et comment désactiver vsync ?

    Merci...

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    C'est normalement le rôle de cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
    Mais il faut peut-être aussi le régler dans les options du driver de ta carte graphique.

  7. #7
    mat.M
    Invité(e)
    Par défaut
    Ces mauvaises performances viennent-elles de l'utilisation des
    bibliothèques MFC ?
    En régle générale , Direct X en mode fenêtré , MFC ou non , ça rame bien plus qu'en mode plein écran .
    Cf . par exemple Flight Simulator..

  8. #8
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par Loulou24
    Mais il faut peut-être aussi le régler dans les options du driver de ta carte graphique.
    En principe les drivers à l'installation, laissent l'application choisir
    le mode de synchronisation. Il y a moyen de forcer dans les options avancées du panneau de controle mais c'est rare qu'il y ait besoin de modifier.

    Sinon les MFC ce n'est pas une explication suffisante pour expliquer une pauvre performance. Sur une carte moderne, le mode fenetré peut aussi dépasser les 500 fps donc ce n'est pas non plus une explication suffisante.
    (meme si ça peut etre la raison, mais qui sait)

    Peut-etre qu'il serait temps de profiler ton application:
    http://download.nvidia.com/developer/presentations/GDC_2004/GDC2004_PracticalPerformanceAnalysis.pdf

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

Discussions similaires

  1. Compter le nombre d'image par secondes (FPS)
    Par poukill dans le forum C++
    Réponses: 7
    Dernier message: 27/10/2008, 17h02
  2. Diminution des images par secondes sous mozilla ou IE
    Par Kalmane dans le forum Intégration
    Réponses: 1
    Dernier message: 09/04/2008, 17h25
  3. Calcul du nombre d'images par seconde
    Par Mindiell dans le forum SDL
    Réponses: 5
    Dernier message: 19/03/2007, 22h12
  4. Pb images par seconde
    Par Greutzeb dans le forum DirectX
    Réponses: 10
    Dernier message: 01/01/2005, 20h04
  5. Blocage à 60 images par seconde
    Par houssa dans le forum OpenGL
    Réponses: 5
    Dernier message: 24/06/2003, 08h52

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