当初觉得DX中设备丢失很讨厌,差点就投奔OpenGL了。
不过现在发现其实也没那么麻烦啦,写点东西,给不清楚 设备丢失怎么处理的同学参考下。
在创建时使用D3DPOOL_MANAGED标志的资源可以不需要重新载入,但D3DPOOL_DEFAULT加载的资源就需要先释放,后重建。
通常需要这样处理的有ID3DXFont和ID3DXSprite,而.X模型什么的就不需要。
在发现设备丢失时,我们要调用 OnLostDevice( void ) 函数让D3DPOOL_DEFAULT加载的资源释放掉。
好在ID3DXFont和ID3DXSprite有设备丢失处理函数,直接调用就好了
void
OnLostDevice(
void
)
{
m_sprite -> OnLostDevice();
m_font -> OnLostDevice();
}
{
m_sprite -> OnLostDevice();
m_font -> OnLostDevice();
}
可是,怎么知道设备丢失了呢?
如果设备丢失,Present()函数就会“出问题”,返回值是D3DERR_DEVICELOST。
m_pIDirect3DDevice
->
EndScene();
HRESULT hr;
hr =
HRESULT hr;
hr =