DirectX 11 SwapChain :: Текущая проблема

#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 исчез и в других играх