導航:首頁 > 器材知識 > 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設備丟失怎麼解決相關的資料

熱點內容
高效好氧生化裝置設計 瀏覽:401
dnf女機械帶什麼稱號號 瀏覽:769
為什麼格力製冷快 瀏覽:807
抖音達人用什麼設備拍的視頻 瀏覽:975
手機連接電腦的wifi設備名稱是什麼原因 瀏覽:417
閥門在安裝前應進行什麼試驗 瀏覽:923
暖氣閥門開關旋鈕結構 瀏覽:753
如何用儀表判斷油氣分離器好壞 瀏覽:559
製作奶茶需要什麼設備 瀏覽:683
哪些計量儀器需要外校 瀏覽:809
什麼的超聲波填空 瀏覽:96
軸承609z是什麼意思 瀏覽:497
傳熱實驗裝置簡圖 瀏覽:755
聯裕機械手怎麼樣 瀏覽:381
繞線機自動排線裝置 瀏覽:18
皇冠方向軸承多少錢 瀏覽:707
航拍儀器是什麼圖片 瀏覽:536
什麼是機械表的發條 瀏覽:486
軸承檢測儀器具有哪些 瀏覽:987
空調只有製冷怎麼制熱 瀏覽:292