c++ - DirectX 9 C++ 程序崩溃并且无法重新打开

标签 c++ directx

我刚刚开始学习如何用 C++ 编写 DirectX 9 应用程序,所以我还不是很好,而且我把它搞得一团糟。

当我在程序崩溃后重新打开程序时,D3D 设备创建失败,结果为 D3DERR_INVALIDCALL。我正在使用 DirectX 2009 年 8 月版 SDK 在 MinGW 中使用 G++ 进行编译。我猜这是因为当它崩溃时我没有释放所有的设备和纹理等,它仍然认为我在使用它们。它在重新启动时重新打开。有人能给我指出正确的方向,告诉我如何“重置”DirectX 吗?

这是我用来创 build 备的内容:

D3D = Direct3DCreate9(D3D_SDK_VERSION);

D3DPRESENT_PARAMETERS D3DPP;
ZeroMemory(&D3DPP, sizeof(D3DPP));
D3DPP.Windowed = TRUE;
D3DPP.SwapEffect = D3DSWAPEFFECT_DISCARD;
D3DPP.hDeviceWindow = hWnd;
D3DPP.BackBufferFormat = D3DFMT_X8R8G8B8;
D3DPP.BackBufferWidth = WIDTH;
D3DPP.BackBufferHeight = HEIGHT;
D3DDevice = 0; //Null pointer to make sure I can check it
HRESULT hr = D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &D3DPP, &D3DDevice);

if (!D3DDevice) {
    MessageBox(NULL,"Device could not be created","error",0);
    switch (hr) {
    case D3DERR_DEVICELOST: 
    MessageBox(NULL,"1","error",0);
    break;
    case D3DERR_INVALIDCALL: 
    MessageBox(NULL,"2","error",0);
    break;
    case D3DERR_NOTAVAILABLE: 
    MessageBox(NULL,"3","error",0);
    break;
    case D3DERR_OUTOFVIDEOMEMORY:
    MessageBox(NULL,"4","error",0);
    break;
    };
    return 1;
};
return 0;

最佳答案

好吧,我得问问。在你打电话之前你有一个有效的 hWnd吗?

确保它是有效的,好事可能会发生。 :-)

关于c++ - DirectX 9 C++ 程序崩溃并且无法重新打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3422911/

相关文章:

c++ - 我的功能有什么问题? (从私有(private)类成员复制到传入的 float 的方法)

c++ - 如何使用 bcp 提取 boost::filesystem

c++ - 有没有办法从 `std::function` 返回到指针?

opengl - 3D 空间(模型/世界、 View /眼睛、投影)

c++ - 如何创建圆形碰撞检测? C++

c++ - 有没有办法将四元数转换为角度?

c++ - execlp 系统调用不打印到标准输出?

c++ - 由于在 Bjarne Stroustrup "Programming and Practices using c++"中找不到符号导致的链接错误

C++ 什么版本的directx?

c++ - 如何找到静态网格的转换?