2015-05-18 10 views
-1

При использовании D3D11 возникла проблема с пустым контекстом вызова -> Present (0,0); ОК. И если он идет до розыгрыша, drawindexed ..., полностью заворачивает окна.D3D11 Freezes Windows Present

В сборке и исполнении отсутствуют ошибки и предупреждения.

GContext->VSSetShader(mVS->GetVertexShader(), NULL, 0); 
GContext->PSSetShader(mPS->GetPixelShader(), NULL, 0); 
GContext->IASetIndexBuffer(NULL, DXGI_FORMAT_UNKNOWN, 0); 
GContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); GContext->Draw(3, 0); 
mSwapChain->Present(0, 0); 
+0

Вы должны предоставить более подробную информацию, например, показать свой код. – gvlasov

+0

Не публикуйте свой код в качестве комментария, вы можете отредактировать свой пост с помощью кнопки «edit» прямо под сообщением. – gvlasov

ответ

0

Включить debug device и искать сообщения в окне отладки, и убедитесь, что вы проверяете все HRESULT для SUCCEEDED или FAILED.

Вы делаете это в «плотной петле»? Где вы обрабатываете свои сообщения Windows?

Вы должны взглянуть на это Windows desktop VS template для хорошей минимальной петли рендеринга.

// Main message loop 
MSG msg = { 0 }; 
while (WM_QUIT != msg.message) 
{ 
    if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 
    else 
    { 
     g_game->Tick(); 
    } 
} 

Здесь Tick - это цикл обновления и цикл рендеринга. См. StepTimer для надежного способа настройки времени обновления.

0

Ваша проблема в некотором незнании кода инициализации D3D, GContext->Draw(3, 0);, вы хотите только нарисовать треугольник.

Так что вы можете попробовать mSwapChain->Present(1, 0);, который будет следовать за Vsync, как 60Hz и present(0,0) работать так быстро, как может, часто 1000-5000Hz зависит от компьютера. Что вы замерзаете, вы не можете взаимодействовать с окном? То, что вы можете следовать совету @Chuck Walbourn в основном цикле, например, добавить код после mSwapChain->Present(0 or 1, 0);.

Как вы знаете, у вас проблемы с amostly ошибка в ошибке, поэтому не беспокойтесь.

Смежные вопросы