2011-06-12 3 views
2

J'ai tout à fait le problème étrange ici. J'utilise directx 11 pour créer mon propre framework/moteur de jeu et ça a bien fonctionné jusqu'à ce que j'essaie d'implémenter le truquage de trames qui m'a donné des problèmes de framerate vraiment bizarres.DirectX 11 SwapChain :: Numéro actuel

J'ai simplifié le problème un peu pour que cela se passe sans que je ne fasse de tris. En ce moment j'ai 250 modèles rendus sur mon écran, 70 fps dans le débogage. Je l'ai fait de sorte que si je tiens dans le bouton H, il saute le rendu de mes modèles dans mon Application :: Render, mais si je le fais, puis relâchez le bouton, mon framerate est environ 40 fois plus souvent environ 4 fps même. Le profilage me montre que c'est SwapChain :: Present que tout d'un coup prend plus de temps que jamais.

En version, c'est le même problème, cela ne se produit que si j'ai mis le débogueur en pièce jointe. Je ne peux pas vraiment comprendre celui-ci moi-même.

Réparation et redémarrage éprouvés.

ma fonction actuelle:

m_pSwapChain->Present(0, 0); 

Mon application :: fonction Render:

void CApplication::Render() const 
{ 
    CD3D::Instance()->BeginRender(); 

    //Render 3d 
    if (!CInputSystem::Instance()->IsKeyPressed('H')) 
    { 
     std::vector<CPlanet*>::const_iterator it; 
     for (it = m_Planets.begin(); it != m_Planets.end(); ++it) 
     { 
      (*it)->Render(); 
     } 
    } 
    // Render 2d 
    m_pScreenSprite->Render(); 

    CTextSystem::Instance()->Render2D(); 
    CD3D::Instance()->EndRender(); 
} 

Voici comment mon profil ressemble avant d'arrêter mes modèles pour être rendus en appuyant sur H:

[Profiler] BeginRender: 2.830984218768823e-005 
[Profiler] Models::Render: 1.4456089627755692e-005 
[Profiler] Text|Sprite ::Render: 0.00015811348030357787 
[Profiler] EndRender: 0.00018853150222864715 
[Profiler] CApplication::Render(): 0.00067612335863149022 

Après avoir appuyé sur H pendant une seconde, relâchez-le pour que les modèles soient à nouveau affichés:

[Profiler] BeginRender: 2.4996988314660883e-005 
[Profiler] Models::Render: 0.0091422720154198285 
[Profiler] Text|Sprite ::Render: 0.00011655222262378027 
[Profiler] EndRender: 0.2590757137694254 
[Profiler] CApplication::Render(): 0.26870557764124803 

J'ai aussi essayé, au lieu de ne pas rendre mes modèles quand je presse H, je crée un nouveau modèle quand je presse C qui a le même effet. Donc, si le nombre de modèles a changé de quelque façon que ce soit pendant l'exécution, mon framerate devient fou.

Cela ne se produit pas si j'ai des fraps en cours d'exécution (allait capturer le comportement afin que vous puissiez le voir). Duno si c'est un indice à quoi que ce soit.

FIXE! Regardez commentaire ci-dessous

+0

Problème résolu, j'aurais dû penser à cela plus tôt, FML. Fonctionne bien maintenant quand j'ai mis à jour mes pilotes à ceux qui sont sortis il y a 11 jours (je les ai mis à jour il ya seulement 1-2 mois la dernière fois). Fonctionne bien maintenant, fpsdrops a également disparu dans d'autres jeux. – Nsanden

+0

Vous pouvez poster la réponse par vous-même et la définir comme solution. –

+0

Merci, mais je ne peux pas jusqu'à 8 heures après avoir fait la question depuis que je suis si nouveau sur le site. – Nsanden

Répondre

1

Enfin, je peux répondre à ma propre question (dû attendre 8 heures)

Problème résolu, je aurais dû penser de cela plus tôt, FML. Fonctionne bien maintenant quand j'ai mis à jour mes pilotes à ceux qui sont sortis il y a 11 jours (je les ai mis à jour il ya seulement 1-2 mois la dernière fois). Fonctionne bien maintenant, fpsdrops a disparu dans d'autres jeux ainsi

Questions connexes