私はここでかなり奇妙な問題を抱えています。私は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。
修繕!以下のコメントを見てください