уничтожить устройство DirectX и обменять цепь

Я сталкиваюсь со странной проблемой 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%. пошагово просматривая код, я вижу, что каждый релиз вызывается правильно. (приложение закроется правильно, если первый блок будет закомментирован.)

Спасибо за понимание по этому вопросу.

1

Решение

Я не совсем уверен, что я сделал, но мне удалось избавиться от этой проблемы. Я чистил код в другой части, и внезапно все начало закрываться должным образом.

У меня такое ощущение, что я неправильно настраивал или закрывал окно.

1

Другие решения

Поскольку цепочка обмена содержит ссылку на контекст устройства, а контекст устройства содержит ссылку на устройство, проблема может быть связана с порядком вызовов. Попробуйте сначала освободить цепочку обмена, затем контекст устройства, а затем само устройство.

0

По вопросам рекламы [email protected]