1

デバイスとスワップ チェーンを作成できると思われる奇妙な問題が発生し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();
}

問題がこれから発生していることはかなり確信していますが、100% 確実ではありません。コードをステップ実行すると、各リリースが正しく呼び出されることがわかります。(最初のブロックがコメントアウトされている場合、アプリケーションは正しく終了します。)

この問題に関する洞察に感謝します。

4

2 に答える 2

1

何をしたかは完全にはわかりませんが、問題を解決することができました。別の部分のコードをクリーンアップしていたところ、突然すべてが適切に閉じ始めました。

ウィンドウを正しく設定または閉じていなかったような気がします。

于 2012-09-22T20:50:02.143 に答える
0

スワップチェーンはデバイスコンテキストへの参照を保持し、デバイスコンテキストはデバイスへの参照を保持するため、問題は呼び出しの順序に関連している可能性があります。最初にスワップチェーンを解放してから、次に-デバイスコンテキスト、次にデバイス自体を解放してみてください。

于 2012-09-21T22:11:00.017 に答える