码迷,mamicode.com
首页 > 其他好文 > 详细

项目中遇到的direct3d问题,设备丢失

时间:2014-10-04 20:59:27      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:os   sp   问题   c   代码   amp   r   ef   bs   

今天在调试项目的时候,遇到一个问题,之前在写代码的时候,调试都是在本地的电脑上进行调试,然而今天是通过远程登陆到电脑进行调试的,所以在调试的过程中遇到了一个问题。

其实开始的时候,有同事反应说,当远程登陆播放的时候,另外一个人登陆进去,开始在播放的那一方退出,然后播放器就崩溃了。然后我看了下打印信息,以为一直是系统的原因,缺少什么库,或者库不完整的原因。

然而后面因为急着需要,所以就认真查看了下原因,看了下崩溃的时候,windows提示的信息是d3d.dll出错。

直到今天,我本人远程到自己的开发电脑上调试的时候,出现了一个问题,就是播放的好好的,然后,当我把远程桌面整个最小化的时候,回到本地播放电脑的时候,再回到远程桌面,播放器就崩溃了。

于是就认真跟踪了下程序,在我们播放器中,D3D,我是用来显示视频用的,代码量不是特别多,所以在重要的函数地方,叫打印信息。

最后重复上面的动作,播放器崩溃了,然后查看,发现时崩溃在:

if(m_pd3dSurface[ddpos] == NULL) return nRet;
switch (m_pd3dDevice[ddpos]->TestCooperativeLevel()){//测试设备丢失状态,即检测设备的当前状态
case D3D_OK://一切正常
break;
case D3DERR_DEVICELOST://设备丢失
CloseDirectDraw();
if (!this->InitDirectDraw ())
{
CloseDirectDraw();

return 0;
}
break;;
case D3DERR_DEVICENOTRESET://复位丢失,可以reset
//m_pd3dDevice[ddpos]->Reset(0);//bug-----所在的位置

m_pd3dDevice[ddpos]->Reset(&d3dpp);//modefy by lhp---解决上面崩溃的问题

CloseDirectDraw();

 

于是在网上查了下资料,认真看了下原因,原来是以为是在设备丢失以后调用复位函数出现的问题。

 

其中前面两篇随笔就是本人查找的过程中,个人觉得比较完整能解决问题的文章资料,所以就贴了过来,留作以后做参考。

项目中遇到的direct3d问题,设备丢失

标签:os   sp   问题   c   代码   amp   r   ef   bs   

原文地址:http://www.cnblogs.com/lihaiping/p/direct3d_lost_device.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!