D3D的设备丢失处理经验

简介:

在D3D图形编程中,你是不是遇到过吃完饭回来,就发现先前运行的DEMO无情地被DOWN掉了的情况。是否遇到过,在DEMO运行过程中,修改了屏幕分辨率,DEMO就DOWN掉了的情况? 这就是传说中的D3D设备丢失。 下面是一些简单的总结。

1.什么时候会设备丢失?
全屏/窗口模式的切换、屏幕锁、修改屏幕分辨率等。上面的这些行为会使D3D设备重置显卡状态以及刷新相应的缓冲区,所以会导致设备的丢失。另外,如果你需要重建后台缓冲区。则同样应该按设备丢失的方法来处理和重新加载你的资源。

2.哪些资源会影响设备丢失?
在创建D3D资源时,可以选择自己管理D3D资源还是让D3D帮你管理资源,前者需要在设备丢失时手动重新载入;后者就不需要。对于使用D3DPOOL_DEFAULT时为自己管理资源,D3DPOOL_MANAGED为D3D管理资源。对于D3DXMESH使用D3DXMESH_SYSTEMMEM因放在系统内存,所以不会存在设备丢失的问题.对于这个问题,你可参见本BLOG中的《D3DPOOL》一文。


3.处理设备丢失的顺序
(1)卸载位于显存的自己管理的D3D资源(D3DPOOL_DEFAULT)和调用一些D3DX资源的OnLostDevice函数,如ISPRITE,ID3DXFONT
(2)按照创建设备时的方法填充D3DPRESENT_PARAMETERS,并使用设备Reset
(3)重新载入设备和调用一些D3DX资源的OnResetDevice函数
(4)重新设置矩阵和初始渲染状态

上面这个是一般方法。对于其中要进行的一些特殊处理,则视个人情况而定!!

另外,当你需要重置资源,但设备又不处于丢失状态的时候。可以强制调用Reset。此时的Reset是不成功的,但他可以导致设备丢失,这样就把要做的工作转交给了处理设备丢失的函数!

作者:码瘾少年·麒麟子 
出处:http://www.cnblogs.com/geniusalex/ 
蛮牛专栏:麒麟子 
简介:09年入行,喜欢游戏和编程,对3D游戏和引擎尤其感兴趣。 
版权声明:本文版权归作者和博客园共有,欢迎转载。转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/geniusalex/archive/2010/04/26/1940511.html

目录
相关文章
|
6月前
|
架构师
顶丰某个客户死机的计算过程
顶丰某个客户死机的计算过程
|
6月前
|
存储 运维 数据挖掘
服务器数据恢复-服务器硬盘掉线导致银行业务模块崩溃的数据恢复案例
某银行的某一业务模块崩溃,无法正常使用。排查服务器故障,发现运行该业务模块的服务器中多块硬盘离线,导致上层应用崩溃。 故障服务器内多块硬盘掉线,硬盘掉线数量超过服务器raid阵列冗余级别所允许的硬盘掉线数量,导致服务器瘫痪。可以通过修复硬盘物理故障,提取故障盘数据后重组raid的方案来恢复服务器数据。
|
4月前
计算机常见故障的分析与案例
计算机常见故障的分析与案例。
30 1
|
5月前
|
缓存 网络协议 Linux
网络的救命稻草:重传机制如何确保数据顺利传输?
在网络传输中,数据的可靠性和稳定性一直是一个重要的挑战。幸运的是,重传机制应运而生,为我们解决了这个问题。本文将深入探讨重传机制在网络中的应用和工作原理。我们将介绍TCP中最常见的超时重传和快速重传,以及SACK和D-SACK这两种高级重传机制。了解这些机制如何工作可以帮助我们更好地理解数据传输的可靠性和稳定性的保障。
114 1
网络的救命稻草:重传机制如何确保数据顺利传输?
|
6月前
|
域名解析 网络协议 网络安全
网络 | 排错五大步骤,没有解决不了的网络故障准达信息准达信息
网络 | 排错五大步骤,没有解决不了的网络故障准达信息准达信息
39 0
|
安全 Windows
计算机系统更新出现你的设备中缺少重要的安全和质量修复
计算机系统更新出现你的设备中缺少重要的安全和质量修复
553 1
计算机系统更新出现你的设备中缺少重要的安全和质量修复
|
SQL 存储 测试技术
|
存储 运维 算法
CPU静默数据错误:存储系统数据不丢不错的设计思考
对于数据存储系统来说,保障数据不丢不错是底线,也是数据存储系统最难的部分。据统计,丢失数据中心10天的企业,93%会在1年内破产。那么如果想要做到数据不丢不错,我们可以采取怎样的措施呢?
CPU静默数据错误:存储系统数据不丢不错的设计思考
|
物联网
如何从5万设备中找出频繁掉线设备,长期不在线的设备?
通过规则引擎监听设备上下线状态变更,了解设备运行情况
2696 0
操作系统中涉及到现场保留和恢复的点
异常和中断 保留现场: 通过push指令将寄存器中的值都压入到栈中 恢复现场: 通过pop指令将栈中的值赋值给寄存器中 进程间切换 保留现场: 通过创建并初始化一个结构体(struct pt_regs该结构体中的属性就是用来保存各个寄存器中的数据的), 将该结构体中的所有数据直接...
993 0