#render #frame-rate #directx-11
#визуализация #частота кадров #directx-11
Вопрос:
У меня здесь довольно странная проблема. Я использую directx 11 для создания своей собственной игровой платформы / движка, и он работал нормально, пока я не попытался реализовать отбраковку усеченного числа, что вызвало у меня действительно странные проблемы с частотой кадров.
Я немного упростил проблему, так что это происходит без того, чтобы я выполнял какую-либо отбраковку усечения. Прямо сейчас у меня на экране отображается 250 моделей, 70 кадров в секунду в режиме отладки. Я сделал так, что если я удерживаю кнопку H, она пропускает рендеринг моих моделей в моем приложении :: Render, но если я сделаю это, а затем снова отпущу кнопку, моя частота кадров после этого достигает максимума около 40, в большинстве случаев даже около 4 кадров в секунду. Профилирование показывает мне, что 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, затем отпустил его, чтобы модели снова отображались:
[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 (собирался зафиксировать поведение, чтобы вы могли это видеть). Не знаю, является ли это ключом к чему-либо.
ИСПРАВЛЕНО! Посмотрите на комментарий ниже
Комментарии:
1. Проблема решена, я должен был подумать об этом раньше, FML. Теперь работает нормально, когда я обновил свои драйверы до тех, которые вышли 11 дней назад (в прошлый раз я обновлял их всего 1-2 месяца назад). Теперь работает нормально, fpsdrops также исчез в других играх.
2. Вы могли бы опубликовать ответ самостоятельно и установить его в качестве решения.
3. Спасибо, но я не смогу раньше, чем через 8 часов после того, как задал вопрос, так как я новичок на сайте.
Ответ №1:
Наконец-то я могу ответить на свой собственный вопрос (пришлось ждать 8 часов)
Проблема решена, мне следовало подумать об этом раньше, FML. Теперь работает нормально, когда я обновил свои драйверы до тех, которые вышли 11 дней назад (в прошлый раз я обновлял их всего 1-2 месяца назад). Сейчас работает нормально, fpsdrops исчез и в других играх