DirectX 11 SwapChain :: Настоящий выпуск - PullRequest
2 голосов
/ 12 июня 2011

У меня здесь довольно странная проблема.Я использую 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 (собирался зафиксировать поведение, чтобы вы могли его увидеть).Дуно, если это ключ к чему-либо.

ИСПРАВЛЕНО!Посмотрите на комментарий ниже

1 Ответ

1 голос
/ 13 июня 2011

Наконец я могу ответить на свой вопрос (пришлось подождать 8 часов)

Проблема решена, я должен был подумать об этом раньше, FML. Теперь работает нормально, когда я обновил свои драйверы до тех, которые появились 11 дней назад (я обновил их всего 1-2 месяца назад в прошлый раз) Теперь работает нормально, fpsdrops исчезла и в других играх

...