Я jusing без полого окна и скопировал код сброса устройства из видео Youtube и он работал там, но я просто получаю сообщение оттуда:directx9: Сброс устройства после Ctrl + Alt + Del
if(FAILED(hr)){
MessageBox(0, "Failed to reset device!", 0, 0);
return;
}
Где я что-то не так? Я что-то забыл в InvalidateDeviceObjects()
? Я могу дать вам больше кода, но не все, потому что это слишком долго. мне действительно нужна помощь ...
Сброс устройства:
void Render(){
if(HandleDeviceLost/*VK_F1*/){
if(DeviceLost){
Sleep(100);
if(FAILED(hr=d3ddev->TestCooperativeLevel())){
if(hr==D3DERR_DEVICELOST){
return;
}
if(hr==D3DERR_DEVICENOTRESET){
//clean
InvalidateDeviceObjects();
//reset device
hr=d3ddev->Reset(&d3dpp);
if(FAILED(hr)){
MessageBox(0, "Failed to reset device!", 0, 0);
return;
}
//restore
RestoreDeviceObjects();
}
return;
}
}
}
DeviceLost=0;
/*
Stuff
*/
hr=d3ddev->Present(NULL, NULL, NULL, NULL);
if(hr==D3DERR_DEVICELOST){
DeviceLost=1;
}
}
объектов релиз:
void InvalidateDeviceObjects(){
buffShipMaterial->Release();
Wall_large->Release();
Wall_small->Release();
space_text->Release();
meshWall->Release();
menuText->Release();
menuText2->Release();
menuText3->Release();
text_cpu->Release();
text_player->Release();
text_player2->Release();
number_0->Release();
number_1->Release();
number_2->Release();
number_3->Release();
number_4->Release();
number_5->Release();
number_6->Release();
number_7->Release();
number_8->Release();
number_9->Release();
number_10->Release();
}
У меня было это на XP при переключении пользователей или на блокирующий экран - это, казалось, проблема с драйвером, и единственным решением было снести и перестроить всю систему DX9, как при запуске приложения. Аналогичные системы с разными картами gfx были в порядке. –
Я думаю, что это что-то в коде, потому что я попробовал (скачал) простую игру с перезагрузкой устройства, и это сработало. – Vider7CC
Итак, у вас есть исходный код для этой простой игры, которая сработала? Если это так, вы можете сравнить. Единственное, что я вижу, это то, что если первый «Сброс» терпит неудачу, для 'InvalidateRect' это нормально, чтобы получить еще одну перерисовку, чтобы повторить попытку. –