DirectX 9 C ++程序崩溃,不会重新打开

时间:2010-08-06 10:30:12

标签: c++ directx

我刚刚开始学习如何使用C ++编写DirectX 9应用程序,所以我仍然不是很好,而且我把它弄得很糟糕。

当程序崩溃后重新打开程序时,D3D设备无法创建,结果为 D3DERR_INVALIDCALL 。我正在使用DirectX August 2009 SDK在MinGW中使用G ++进行编译。我猜它是因为我崩溃时没有释放所有设备和纹理等,它仍然认为我正在使用它们。它会在重新启动时重新打开。是否有人能够指出我如何排序“重置”DirectX?

以下是我用来创建设备的内容:

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;

2 个答案:

答案 0 :(得分:0)

我必须要问。在拨打电话之前,你有有效的 hWnd吗?

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

答案 1 :(得分:0)

似乎MsgProc中的某些内容导致该设备的窗口失败,并且我的程序崩溃了。不管怎样,谢谢。