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