D3D11与D3D9全屏/窗口化切换差异

D3D11或D3D10中,程序由窗口化切换到全屏,只需要简单的调用
IDXGISwapChain::SetFullscreenState  来改变换链的状态即可实现切换,开发者不用考虑资源丢失与重建的问题。


在D3D9中则不一样,D3D9中调用IDirect3DDevice9::Reset  来重建设备。
在重建设置之前呢,必须得手动释放与这个设备相关联的资源,不然函数调用会失败,
哪些资源是要释放的,哪些又不用释放呢?
资源在创建的时候,使用D3DPOOL_MANAGED标志创建可以不用释放,
资源在创建的时候,使用D3DPOOL_DEFAULT标志则必须释放,
比如ID3DXFont和ID3DXSprite就有自带的OnLostDevice方法,来暂时与device失去联系,重建device再调OnResetDevice方法恢复。
 
资源释放之后,调用 IDirect3DDevice9::Reset 来重建设备,设备重建之后,得重新恢复资源,设备在重建之前的相关矩阵变换,渲染状态及采样状态等都得重新恢复。 


由上面可总结D3D9中窗口切换过程


1、OnLostDevice     这里处理重建前的资源释放
2、ResetDevice   重建device
3、OnResetDevice  恢复资源及相关状态


//-------------------设备丢失处理-----------------
 IDirect3DDevice9::Present  的返回值能检测一个设备此时的状态是不是丢失状态(丢失并不等于此时的设备不可用了),这里只是与之前创建时的显卡失去联系,


IDirect3DDevice9::TestCooperativeLevel()==D3DERR_DEVICENOTRESET 


检测设备是否为未恢复状态,如果是,则执行OnLostDevice -- Reset ---  OnResetDevice 流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值