zoukankan      html  css  js  c++  java
  • 项目中遇到的direct3d问题,设备丢失

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

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

    然而后面因为急着需要,所以就认真查看了下原因,看了下崩溃的时候,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();

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

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

  • 相关阅读:
    5.5 使用Hystrix实现断路器
    第5章 使用Spring Cloud和Netflix Hystrix的客户端弹性模式
    4.4 通过Spring Eureka注册服务
    MT【138】对称乎?
    MT【137】多少个?
    MT【136】一道三次函数的最佳逼近问题
    MT【135】条件线性化
    MT【134】待定系数
    MT【133】磨刀不误砍柴工
    MT【132】倒序相加因式分解
  • 原文地址:https://www.cnblogs.com/lihaiping/p/direct3d_lost_device.html
Copyright © 2011-2022 走看看