DirectX 9 C ++ программа аварийно завершает работу и не открывает заново - PullRequest
1 голос
/ 06 августа 2010

Я только начинаю изучать, как программировать приложения DirectX 9 на C ++, так что я все еще не очень хорош, и я возиться с этим совсем немного.

Когда я снова открываю программу после сбоя, устройство D3D не может создать с результатом D3DERR_INVALIDCALL . Я компилирую с G ++ в MinGW, используя DirectX August 2009 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 ]

0 голосов
/ 07 августа 2010

Кажется, что-то в MsgProc вызывало сбой окна для устройства и сбой моей программы.В любом случае, спасибо.

0 голосов
/ 07 августа 2010

Ну, я должен спросить.Есть ли у вас действительный hWnd до того, как вы сделаете звонок?

Убедитесь, что он действителен и что-то хорошее может произойти.: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...