2012-09-21 42 views
1

我遇到了一個奇怪的問題,我認爲涉及D3D11CreateDeviceAndSwapChain我可以創建設備和交換鏈,但是當應用程序退出並且->destroy被調用到交換鏈,設備和設備上下文時,線程仍然運行。註釋掉該行,應用程序按預期終止。破壞directx設備和交換鏈

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(); 
} 

我相當有信心,這個問題從該來了,但我不是100%肯定。通過代碼,我看到每個發佈都被正確調用。 (如果第一個塊被註釋掉,應用程序將正常關閉。)

感謝您對此問題的任何見解。

回答

0

因爲交換鏈持有對設備上下文的引用,並且設備上下文持有對設備的引用,所以問題可能與調用順序有關。嘗試釋放交換鏈,然後 - 設備上下文,然後設備本身。

+0

感謝您的回答,但問題依然存在。 – akuseru

0

我不完全確定我做了什麼,但我設法讓問題消失。我正在清理不同部分的代碼,突然間一切都開始正常關閉。

我有一種感覺,我沒有正確設置或關閉窗口。