代码之家  ›  专栏  ›  技术社区  ›  AStupidNoob

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

  •  1
  • AStupidNoob  · 技术社区  · 14 年前

    我刚开始学习如何在C++中编写DirectX 9应用程序,所以我仍然不太好,我把它搞得一团糟。

    当我在程序崩溃后重新打开程序时,D3D设备无法创建,结果是 D3DERR\ U无效呼叫 . 我正在用MinGW中的G++进行编译,使用的是DirectX 2009年8月的SDK。我猜是因为当它崩溃时我没有释放所有的设备和纹理等,它仍然认为我在使用它们。重新启动时重新打开。有人能给我指出正确的方向,如何排序“重置”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 回复  |  直到 11 年前
        1
  •  0
  •   JustBoo    14 年前

    在你打电话之前怎么办?

        2
  •  0
  •   AStupidNoob    14 年前