导航:首页 > 器材知识 > d3d设备丢失怎么解决

d3d设备丢失怎么解决

发布时间:2025-05-17 20:35:28

① d3d设备丢失该怎么办

设置丢失 设备丢失的典型情况:图形显示丢失焦点,例如按下alt+tab键,或者弹出一个系统对话框;调用Reset接口函数的任何错误也会导致设备丢失。丢失后,所有继承自IUnknown的方法仍可以继续正常正作,除了Present()会返回D3DERR_DEVICELOST错误代码。 处理设备丢失:在重设(reset)丢失的设备之前,必须重新创建所有相关的资源(包括显存!)。在设备丢失后,应查询是否可以将设备恢复(restore) 到工作状态。如果不能,则等行直到设备可以恢复。如果丢失的设备可以恢复,则在恢复之前程序需要销毁所有的显存资源和所有的交换链(swap chains),然后调用Reset()函数恢复设备。Reset函数是设备丢失后设备对象(LPDIRECT3DDEVICE9 device)唯一可以调用的函数。但是,一旦应用程序释放了所有D3DPOOL_DEFAULT内存资源,包括由函数CreateRenderTarget()与CreateDepthStencilSurface()创建的资源,Reset()的调用也将失败.大多情况下,DIRECT3D设备对象的许多方法并不返回设备是否丢失的消息,程序可以继续调用图形渲染函数,例如DrawPrimitive(),而不会接收到任何设备已经丢失的消息.在内部,这些操作将被抛弃,直到设备恢复到工作状态.在设备丢失后,程序中可以通过调用TestCooperativeLevel()接口函数确定设备是否能够恢复.若返回D3D_OK代码,表示设备可以恢复;若返回D3DERR_DEVICELOST代码,则表示目前设备还不能够被恢复. 锁定操作:设备丢失后,D3D在内部已经做了大量的工作确保锁定操作成功.但是不能保证在锁定操作期间显存的内容是准确无误的,只能保证不会返回错误代码.这样应用程序就可以继续工作,而不管设备是否丢失.当然,这时并不会渲染出任何图形. 资源:在设备丢失时,设备与显卡的内存不再相关联,因此,显存里的资源将全部被销毁,必须全部重新创建.而在设备丢失期间,对资源空间的分配也只能在内存上实现,无法在显存上分配内存空间.这些假的表面资源看上去允许正常锁定与复制操作,直到调用present函数会发现设备已经丢失.在从设备丢失状态恢复到正常值时,所有视频内存必须被释放,意味着应用程序需要释放所有由CreateAdditionalSwapChain()函数所创建的交换链和所有D3DPOOL_DEFAULT内存类型的资源,而不用释放D3DPOOL_MANAGED和D3DPOOL_SYSTEMMEM内存类型的资源.(因显存里那些资源可能在设备丢失时被改动过了,必须释放后重新申请,并载入). 有关设备丢失的返回数据:ValidateDevice()确认硬件一次渲染纹理混合和渲染状态的能力,如果设备丢失,它会返回D3DERR_DEVICELOST; D3D允许显存资源数据到系统内存的传输,如果设备丢失,会导致传输的失败. IDirect3DQuery9::GetData()可指定FLUSH标记,如果丢失设备,它也会返回D3DERR_DEVICELOST; 另外,既然设备丢失时没有主表面,那么调用Direct3DDevice9::GetFrontBufferData()也会失败. 因为设备丢失,无法创建后备缓冲,故CreateAddtionalSwapChain()也会失败.这些情况再加上Presnet(), TestCooperative(), Reset(),只会在设备丢失时出现. 可编程渲染器:在D3D9中,设备从丢失到正常时,VS与PS不需要重新创建,D3D能自动恢复它们.在以前的版本中则需要重新创建.

D3D 设备丢失后,什么会一同丢失?

1:Default中加载的资源。这些资源在设备丢失后要手工Release掉,难怪Sprite提供了ID3DXSprite::OnLostDevice
ID3DXSprite::OnLostDevice Use this method to release all references to video memory resources and delete all stateblocks. This method should be called whenever a device is lost or before resetting a device.

2:RenderState渲染状态,难怪Sprite都提供了ID3DXSprite::OnResetDevice等相关的函数,就是为了恢复渲染状态 .
ID3DXSprite::OnResetDevice Use this method to re-acquire resources and save initial state.

3:Stencil Buffer,RenderTarget,及显存中的数据会丢,另外,后备缓冲中的数据也会丢。

阅读全文

与d3d设备丢失怎么解决相关的资料

热点内容
高压阀门填料是什么材料 浏览:793
自动扶梯必须装设梯级下陷保护装置 浏览:486
如果水有毒什么仪器马上测出来 浏览:148
用什么仪器检查耳朵负压原因 浏览:929
煤气阀门一定要装吗 浏览:898
广迎塑胶五金制品 浏览:528
光合作用产生淀粉装置组装 浏览:315
压力铸造为什么不适合大型铸件 浏览:741
宝马118i工具箱 浏览:266
miui6wsm工具箱 浏览:170
实验室制二氧化碳气装置 浏览:13
控制阀门需要监测什么数据 浏览:719
张家港市海航机械有限公司怎么样 浏览:593
机械停表的发条是什么 浏览:830
第一个无线设备在哪里 浏览:953
两个F是什么阀门 浏览:244
超声波模块怎么感应 浏览:425
江湖风云录东皇剑什么铸造特性好 浏览:994
触控自动喷雾洒水装置 浏览:401
二次回路中直流绝缘监察装置的作用 浏览:743