我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'进行另一次重绘是正常的,所以你再试一次。 –