简单的D3D初始化程序,如何处理设备丢失?

yrisxfyh 2010-01-18 06:25:44
假如程序就实现了在窗口上显示一个三角形,全屏模式的,如果切换到桌面,就无法再正常切换回去,这属于设备丢失吧?

如果是的话,我用g_D3DDevice->Reset(&d3dpp)试图重置,但结果却调用失败了。


(我参考的是这个文章:http://hi.baidu.com/probill/blog/item/42371e113e9aed74cb80c43e.html)

关键代码:

void InitDevice();

void OnLostDevice(void)
{
// m_sprite->OnLostDevice();
// m_font->OnLostDevice();
}


void OnResetDevice(void)
{
if(FAILED(g_D3DDevice->Reset(&d3dpp)))
{
return;
}

// m_sprite->OnResetDevice();
// m_font->OnResetDevice();

InitDevice();
}


void InitDevice()
{
InitializeObjects();
}


WinMain部分:
// ,,,

g_D3DDevice->EndScene();

HRESULT hr;
hr = g_D3DDevice->Present(NULL, NULL, NULL, NULL);
if(hr == D3DERR_DEVICELOST)
{
if(g_D3DDevice->TestCooperativeLevel() == D3DERR_DEVICENOTRESET)
{
OnLostDevice();
OnResetDevice();
}
}
//,,,


...全文
100 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
张赐 2010-01-18
  • 打赏
  • 举报
回复
恭喜
接分~
yrisxfyh 2010-01-18
  • 打赏
  • 举报
回复
找到原因了
我没有把在D3DPOOL_DEFAULT中分配的资源释放掉
所以,我加了这句:
if(g_VertexBuffer != NULL)
{
g_VertexBuffer->Release();
}
g_VertexBuffer = NULL;

就解决了^_^,

谁要分过来拿吧

8,304

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧