• 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是不成功的,但他可以导致设备丢失,这样就把要做的工作转交给了处理设备丢失的函数!

  • 相关阅读:
    Linux 命令
    oracle sqlplus链接和sid
    sql 应用记录
    数据库接口基础类 oracle,sql server
    oracle 触发器
    js json -> <-object
    Docker学习总结(三)--常用命令
    MySQL之binlog日志
    Redis学习总结(九)-- Redis常用技巧
    Redis学习总结(八)--Redis云平台
  • 原文地址:https://www.cnblogs.com/qilinzi/p/1940511.html
Copyright © 2020-2023  润新知