Войти
ПрограммированиеФорумГрафика

Поясните за SwapChain D3D11

#0
21:35, 11 июня 2018

Есть вот такой код. Очень странное поведение дайвера. То все работает прекрасно, то swapChain->Present(0, 0) выдает ошибку и соответственно черный экран

    auto pSwapChain = ComPtr<IDXGISwapChain1>{};
    auto swapChainDesc = DXGI_SWAP_CHAIN_DESC1{};
    swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    swapChainDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    swapChainDesc.BufferCount = countBuffer;
  //  swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
    swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;
    swapChainDesc.SampleDesc = { 1, 0 };

    auto swapChainFullScreenDesc = DXGI_SWAP_CHAIN_FULLSCREEN_DESC{};
    swapChainFullScreenDesc.RefreshRate = window.IsVSync() ? DXGI_RATIONAL { numerator, denominator } :  DXGI_RATIONAL{ 0, 1 };
    swapChainFullScreenDesc.Windowed = !window.IsFullScreen();
    swapChainFullScreenDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
    swapChainFullScreenDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
    

    DX::ThrowIfFailed(m_ComObject->CreateSwapChainForHwnd(device, window.GetHwnd(), &swapChainDesc, &swapChainFullScreenDesc, output, &pSwapChain));
    DX::ThrowIfFailed(m_ComObject->MakeWindowAssociation(window.GetHwnd(), DXGI_MWA_NO_ALT_ENTER));
    return SwapChain{ pSwapChain };

#1
21:43, 11 июня 2018

IBets
> то swapChain->Present(0, 0) выдает ошибку
Какую ошибку?

#2
(Правка: 21:52) 21:52, 11 июня 2018

MrShoor
0x887a0006

#3
22:06, 11 июня 2018

IBets
0xDEADCODE ?

#4
22:10, 11 июня 2018

innuendo
0x887a0006

#5
(Правка: 23:11) 23:11, 11 июня 2018
Изображение

Видимо, ещё не все UB отловил. c:

#6
(Правка: 23:42) 23:41, 11 июня 2018

Delfigamer
Да уж похоже я покину лигу C++ и  отправлюсь в -> pure C

#7
0:02, 12 июня 2018

IBets
> 0x887a0006
Это DXGI_ERROR_DEVICE_HUNG
Что означает, что ошибка в другом месте, а не в Present. Ищи и чини.

ПрограммированиеФорумГрафика