博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
项目中遇到的direct3d问题,设备丢失
阅读量:6238 次
发布时间:2019-06-22

本文共 955 字,大约阅读时间需要 3 分钟。

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

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

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

 

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

 

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

转载地址:http://prwia.baihongyu.com/

你可能感兴趣的文章
无线应用安全剖析
查看>>
GNU/Linux安全基线与加固-0.1
查看>>
当产品/后端/QA/你自己说了这些话,就要警惕了!
查看>>
聊聊directory traversal attack
查看>>
OC消息转发机制
查看>>
理解函数防抖Debounce
查看>>
10分钟了解react引入的hooks
查看>>
用一个简易的 web chat 说说 Python、Golang、Nodejs 的异步
查看>>
Nginx代理访问提示ERR_CONTENT_LENGTH_MISMATCH
查看>>
【iOS开发】在Xcode中做一个 a包合成脚本
查看>>
注册、登录和 token 的安全之道
查看>>
离线批量数据通道Tunnel的最佳实践及常见问题
查看>>
【前端该了解的服务器知识】Ubuntu 16.04下安装MySQL的过程。
查看>>
Servlet的那些事
查看>>
C语言入门经典读书笔记 ----第三章 条件判断
查看>>
反射基本使用
查看>>
GCD计时器替换NSTimer
查看>>
基于Spring Cloud 几行配置完成单点登录开发
查看>>
Android Kotlin仿微信头像裁剪图片
查看>>
Java 反射由浅入深 | 进阶必备
查看>>