我手头有一个很奇怪的问题。我正在使用 directx 11 来制作我自己的游戏框架/引擎,它一直运行良好,直到我尝试实现平截头体剔除,这给了我非常奇怪的帧速率问题。
我稍微简化了这个问题,所以它发生在我没有进行任何截锥体剔除的情况下。现在我的屏幕上渲染了 250 个模型,调试中为 70 fps。我已经做到了,如果我按住按钮 H 它会跳过我的模型在我的 Application::Render 中的渲染,但是如果我这样做然后再次松开按钮,我的帧率在大多数情况下都会达到 40 左右甚至大约 4 fps。分析向我展示了它是 SwapChain::Present,它突然需要比它应该的更长的时间。
在 Release 中,这是同样的问题,只有当我附加了调试器时才会发生这种情况。我自己真的想不出来这个。
尝试重建和重新启动。
我现在的功能:
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 一秒钟后释放它,以便再次渲染模型:
[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 时创建一个具有相同效果的新模型。因此,如果在运行时渲染的模型数量以任何方式发生变化,我的帧率就会发疯。
如果我正在运行 fraps,则不会发生这种情况(要捕获该行为以便您可以看到它)。邓诺,如果这是任何线索。
固定的!看看下面的评论