销毁directx设备和交换链

时间:2012-09-21 21:17:09

标签: c++ directx directx-11

我遇到了一个奇怪的问题,我认为涉及D3D11CreateDeviceAndSwapChain我可以创建设备和交换链但是当应用程序退出并且->destroy在交换链,设备和设备上下文上调用一个线程时还在运行在注释掉这一行时,应用程序会按预期终止。

featureLevel = D3D_FEATURE_LEVEL_11_0;
result = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, &featureLevel, 1, D3D11_SDK_VERSION, &swapChainDesc, &m_swapChain, &m_device, NULL, &m_deviceContext);

if(FAILED(result))
{
#ifdef _DEBUG
    log(logDEBUG) << "Error at D3D11CreateDeviceAndSwapChain";
#endif
    return false;
}
return true;

和破坏:

if(m_swapChain)
{
    m_swapChain->SetFullscreenState(false, NULL);
}

if(m_device)
{
    m_device->Release();
}

if(m_deviceContext)
{
    m_deviceContext->Release();
}

if(m_swapChain)
{
    m_swapChain->Release();
}

我相信这个问题来自于此,但我并非百分之百确定。单步执行代码,我看到每个Release都被正确调用。 (如果第一个块被注释掉,应用程序将正常关闭。)

感谢您对此问题的任何见解。

1 个答案:

答案 0 :(得分:0)

由于交换链包含对设备上下文的引用,并且设备上下文包含对设备的引用,因此问题可能与调用的顺序有关。首先尝试释放交换链,然后是设备上下文,然后是设备本身。