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

熱點內容
怎麼在電腦上破掉手機設備鎖 瀏覽:676
呼和浩特市最大五金市場 瀏覽:572
水暖安裝都需要什麼水泵設備 瀏覽:59
機械下料工工資多少錢 瀏覽:699
河南超聲波感測器怎麼樣 瀏覽:925
滄州五金製品展會 瀏覽:395
青軸機械鍵盤鍵位怎麼拆 瀏覽:934
東莞寮步精密五金製品廠 瀏覽:878
新買了個機械硬碟怎麼裝 瀏覽:380
安檢工作儀器怎麼拿 瀏覽:962
新型環保隔牆板設備多少錢 瀏覽:471
機械表怎麼矯正時間 瀏覽:790
上海轉盤skf軸承多少錢 瀏覽:770
光影藝術裝置設計 瀏覽:263
公共安全設備需要什麼經營范圍 瀏覽:824
機坪運行監管需用器材有哪些 瀏覽:868
盤管後製冷效果不好是什麼原因 瀏覽:887
新款雪佛蘭儀表台怎麼拆 瀏覽:955
物理機械符號怎麼念 瀏覽:501
機械2個孔的距離怎麼做檢具 瀏覽:963