关键词不能为空

当前您在: 主页 > 英语 >

Direct3d 设备丢失 (device lost)

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-18 10:34
tags:

-

2021年2月18日发(作者:考虑考虑)


Direct3d


设备丢失



(device lost)







1.


什么时候设备丢失






一个< /p>


Direct3D


设备


,


有两种状态


:


操作状态或丢失状态。



操作状态


:


是设备的正常状态


,


设备按预期运行


,


并且能

< p>
present


所有渲染效果



丢失状态


:


所有渲染操作悄然失败


,


IDire ct3DDevice9::present


返回错误码


D3D ERR_DEVICELOST




查帮助


Lost Devices (Direct3D 9)


看更详细介绍,用最民工


的语言简略说说:什么时候设备会丢失 ?




1


)全 屏模式下当前


Direct3D


窗口丢失焦点时




2


)有多个


Direct3D


窗口,其中一个进入全屏则其它设备


丢失


(多显卡时情况则不同,


每个显卡设备只有一个能全屏)



系统休眠或者锁定


(Win+L)



3



IDi rect3DDevice9::Reset


调用失败时


,


设备也会被设


置为丢失状态




4


)重新设置


Dir ect3D device


参数时







2.


如何发现设备丢失








IDirect3DDevice9::present


返回错误码


D3DERR_DEVICELOST




D3DERR_DRIVERIN TERNALERROR(


这种情况下基本上



exit



)


IDirec t3DDevice9::TestCooperativeLevel


返回错误码


D3DERR_DEVICELOST



D 3DERR_DRIVERINTERNALERROR(DX10


整合到


present


中了


)




不论通过任何方式发生了设备丢失,所有的操作几乎都会失< /p>


效,


只有


Release()

< p>
可以用——其实


D3D


会保证有部分操作


可以成功,但



是也仅仅是“可以”成功而不是 “一定”成功,


所以你还不如认定


丢失的时候全都会失败比较好 ——以及



IDirect3DDevice9::TestC ooperativeLevel


。因此在设备丢失


之后,你应 该停止整个游戏循环,而通过反复调用



IDirect3DD evice9::TestCooperativeLevel


判断设备是否可


用。



IDirect3DDevice9:: TestCooperativeLevel





这个


方法检测当前的设备状态。


返回值有四种:


D3D_OK


一切正


常,


D3DERR_DEVICELOST


设 备丢失,


D3DERR_DEVICENOTRESET


设备< /p>



可以


Reset


。另外还有


D3D9


新增的


D3DE RR_DRIVERINTERNALERROR


,遇到这个你就完蛋

< br>了,基本不可能恢复了,终止程序吧。





按照顺序来讲,


如果游戏在正常运行 ,


D3D_OK


会返回;


如果发生了设 备丢失并且在这个时候不能恢复,比如全屏幕


模式的时候



用户切换到了


Windows


桌面,就会返 回


D3DERR_DEVICELOST


;如果用户又切换回了 游戏,设备


可以恢复了(还没恢复呢!只是“可



以”恢复而已)


,就会返回


D3DERR_DEVI CENOTRESET








另外,


IDirect3DDevice9::Present


也会返 回类似的值,不


过你最好别指望这个,


老老实实的用

< p>
TestCooperativeLevel



因 为



Present


在设备可以恢复的 时候还是返回


D3DERR_DEVICELOST


(外一句:


D3D10


的时候


TestCoope rativeLevel


就会完全整合到


Present


里面了,可喜可贺可喜可贺)




3.


发现设备丢失后






1.


查询设备状态


,


看是否可以将之恢复到操作状态


.


如果不



,


则必须要等到设备可以被恢复为止


.




2.


释放所有在

D3DPOOL_DEFAULT


中分配的资源


,


包括用


IDirect3DDevice9::CreateRend erTarget




IDirect 3DDevice9::CreateDepthStencilSurface


方法创 建的


资源


. (


不进行这一步


,


下一步的


Reset


操作会失败


)




3.


调用


IDirect3DDevice::Reset


进行恢复


. Reset


方法是当设


备丢失时


,


唯一有效的方法


,


并且是应用程序可 用来把设备


从丢失状态



恢复到操作状态的唯一方法


.




4.


重建在步骤

2


中释放的资源


,


同时还需要重 新设置


state







4.


管理资源






1.< /p>


资源管理是将资源从系统内存提升到设备可访问存储器及


从设备可 访问存储器中抛弃的过程





2.D3DPOOL_MANAGED


标志指定一个由系统管理的资源 。


由系统管理的资源在设备的丢失状态和操作状态间的转换


中持 续存在。通过调




IDirect3 DDevice9::Reset


设备可以被重置,


并且这类资 源


可以继续正常运作而无需重新载入图片。但是,如果设备必


须 被销毁和



重建,那么所有用


D3DP OOL_MANAGED


创建的资源也必


须被重建





3.D3DPOOL _DEFAULT


标志指定把资源放在默认的池中。


在默认的池 中的资源在设备从丢失状态到操作状态的转换


过程中不持续存在,



这些资源必须在调用


Reset


之 前释放,然后重建





4.


不是所有的类型和用途都支持资源管理。例如,用


D3DUSAGE_RENDERTARGET


标志创建的对象不支持资


源管理。另外,不建议对需要



频繁改变其内容的对 象使用资源管理。例如,在某些硬件上


对一个每帧都需改变的顶点缓存进行自动管理会严 重降低

-


-


-


-


-


-


-


-



本文更新与2021-02-18 10:34,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/664987.html

Direct3d 设备丢失 (device lost)的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文