当我尝试玩 Rastertek DirectX 11 教程之一时出现问题。
- 我将
const bool fullscreen value
更改为false
因此程序在窗口模式下运行 - 我将窗口样式从
CLIPPINGWINDOW
更改为OVERLAPPEDWINDOW
它工作正常,除了当窗口被销毁时程序抛出异常:
Unhandled exception at 0x779715ee in FrustumCulling.exe: 0xC0000005: Access violation reading location 0xfeeeff5e.
教程 16 http://www.rastertek.com/dx11tut16.html
我所做的唯一修改是:
在graphicsclass.h
const bool FULL_SCREEN = true//false;
和
SystemClass::InitializeWindows
{
...
m_hwnd = CreateWindowEx(WS_EX_APPWINDOW, m_applicationName, m_applicationName,
WS_OVERLAPPEDWINDOW,
posX, posY, screenWidth, screenHeight, NULL, NULL, m_hinstance, NULL);
...
}
最佳答案
您是否仍在全屏模式下设置交换链? 当我遇到这个问题时,将它添加到我的 DxClass 的析构函数中解决了它
if(_swapChain != nullptr)
{
_swapChain->SetFullscreenState(false, NULL);
_swapChain->Release();
_swapChain = nullptr;
}
根据其中一个教程中的 Rastertek 评论之一,交换链必须在发布之前将全屏设置为 false。
当您设置 DXGI_SWAP_CHAIN_DESC
时,请确保您使用的是 swapChainDesc.Windowed = !FULL_SCREEN
而不是文字 bool 值,并确保将 FULL_SCREEN 设置为 false,FULL_SCREEN = true//false;
不会那样做,也不应该编译。
关于c++ - DirectX 程序在窗口模式下销毁时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15654969/