2

私はここでかなり奇妙な問題を抱えています。私はdirectx11を使用して独自のゲームフレームワーク/エンジンを作成していますが、錐台カリングを実装しようとするまでは問題なく動作し、フレームレートの問題が非常に奇妙になりました。

問題を少し単純化したので、錐台カリングを行わなくても問題が発生します。現在、画面に250のモデルがレンダリングされており、デバッグでは70fpsです。ボタンHを押したままにすると、Application :: Renderでモデルのレンダリングがスキップされるように作成しましたが、これを行ってからもう一度ボタンを離すと、フレームレートはほとんどの場合40を超えます。約4fpsでも。プロファイリングは、それがSwapChain :: Presentであり、突然のすべての時間が、これまでよりもはるかに長い時間がかかることを示しています。

リリースでも同じ問題があります。これは、デバッガーを接続した場合にのみ発生します。私はこれを自分で本当に理解することはできません。

再構築と再起動を試みました。

私の現在の機能:

m_pSwapChain->Present( 0, 0);

私のアプリケーション::レンダリング機能:

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();
}

これは、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

Hを1秒間押してから放した後、モデルが再びレンダリングされるようにします。

[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

また、Hを押したときにモデルをレンダリングしない代わりに、Cを押したときに同じ効果を持つ新しいモデルを作成してみました。したがって、実行時にレンダリングされるモデルの数が何らかの形で変化すると、フレームレートが狂ってしまいます。

私がフラップを実行している場合、これは起こりません(あなたがそれを見ることができるように振る舞いをキャプチャするつもりでした)。それが何かの手がかりなら、Duno。

修繕!以下のコメントを見てください

4

1 に答える 1

1

最後に、私は自分の質問に答えることができます(8時間待たなければなりませんでした)

問題は解決しました。FML さん、もっと早く考えるべきでした。ドライバーを 11 日前にリリースされたドライバーにアップグレードしたところ、問題なく動作しました (前回は 1 ~ 2 か月前にアップグレードしました)。現在は問題なく動作していますが、他のゲームでも fpsdrops は消えています

于 2011-06-13T03:50:28.087 に答える