У меня здесь довольно странная проблема.Я использую DirectX 11 для создания своего собственного игрового фреймворка / движка, и он работал нормально, пока я не попытался реализовать отбраковку фрустума, которая вызывала у меня действительно странные проблемы с частотой кадров.
Я немного упростил задачу, поэтомупроисходит без меняСейчас у меня на экране 250 визуализированных моделей, 70 кадров в секунду в отладке.Я сделал это так, что если я удерживаю кнопку H, она пропускает рендеринг моих моделей в моем Application :: Render, но если я делаю это и затем снова отпускаю кнопку, моя частота кадров в большинстве случаев после этого составляет около 40около 4 кадров в секунду даже.Профилирование показывает мне, что это SwapChain :: Present, что внезапно занимает гораздо больше времени, чем когда-либо.
В Release это та же проблема, это происходит только в том случае, если я подключил отладчик, кстати.Я не могу понять это сам.
Попытка восстановления и перезагрузки.
моя нынешняя функция:
m_pSwapChain->Present( 0, 0);
My Application :: Render function:
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 (собирался зафиксировать поведение, чтобы вы могли его увидеть).Дуно, если это ключ к чему-либо.
ИСПРАВЛЕНО!Посмотрите на комментарий ниже