我j使用一個無國界的窗口和複製從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
所以你有這個簡單的遊戲工作的源代碼?如果是這樣,你可以比較。我唯一能看到的是,如果第一個'Reset'失敗,那麼對'InvalidateRect'進行另一次重繪是正常的,所以你再試一次。 –