IDirect3DDevice9::Reset 方法 (d3d9helper.h)
重設交換鏈結的類型、大小和格式。
語法
HRESULT Reset(
[in, out] D3DPRESENT_PARAMETERS *pPresentationParameters
);
參數
[in, out] pPresentationParameters
描述新簡報參數 之D3DPRESENT_PARAMETERS 結構的指標。 此值不可為 Null。
切換至全螢幕模式時,Direct3D 會嘗試尋找符合背景緩衝區格式的桌面格式,讓後端緩衝區和前端緩衝區格式相同 (,以消除色彩轉換) 的需求。
這個方法傳回時:
- BackBufferCount、BackBufferWidth 和 BackBufferHeight 會設定為零。
- BackBufferFormat 只會針對視窗模式設定為 D3DFMT_UNKNOWN ;全螢幕模式必須指定格式。
傳回值
類型: HRESULT
可能的傳回值包括:D3D_OK、D3DERR_DEVICELOST、D3DERR_DEVICEREMOVED、D3DERR_DRIVERINTERNALERROR或D3DERR_OUTOFVIDEOMEMORY (請參閱 D3DERR) 。
備註
如果呼叫IDirect3DDevice9::Reset失敗,裝置將會處於「遺失」狀態 (,如從呼叫IDirect3DDevice9::TestCocolLevel) 傳回值所指出,除非它已經處於「未重設」狀態 (,如從IDirect3DDevice9 的呼叫傳回 D3DERR_DEVICELOST值D3DERR_DEVICENOTRESET表示:TestCo) 。 如需在遺失裝置內容中使用IDirect3DDevice9::Reset 的進一步資訊,請參閱IDirect3DDevice9::TestCo (Direct3D 9) 。
呼叫 IDirect3DDevice9::Reset 會導致所有紋理記憶體表面遺失、從視訊記憶體排清 Managed 紋理,以及所有狀態資訊都會遺失。 在呼叫裝置的 IDirect3DDevice9::Reset 方法之前,應用程式應該釋放任何明確的轉譯目標、深度樣板表面、其他交換鏈結、狀態欄塊,以及與裝置相關聯的資源D3DPOOL_DEFAULT。
交換鏈結有兩種不同類型的:全螢幕或視窗化。 如果新的交換鏈結是全螢幕,配接器將會放在符合新大小的顯示模式中。
Direct3D 9 應用程式預期會在此呼叫期間傳送訊息 (,例如,在傳回此呼叫之前) ;應用程式應該採取預防措施,不要目前呼叫 Direct3D。 此外, 當 IDirect3DDevice9::Reset 失敗時,唯一可以呼叫的有效方法是 IDirect3DDevice9::Reset、 IDirect3DDevice9::TestCocolLevel和各種 Release 成員函式。 呼叫任何其他方法可能會導致例外狀況。
如果在與用來建立重設裝置不同的執行緒上呼叫 IDirect3DDevice9::Reset ,將會失敗。
圖元著色器和頂點著色器在 IDirect3DDevice9::Reset 呼叫 Direct3D 9 後存留。 應用程式不需要明確地重新建立它們。
呼叫IDirect3D9::CreateDevice、IDirect3DDevice9::Reset和IDirect3DDevice9::CreateAdditionalSwapChain時,可以針對視窗模式的背景緩衝區格式指定D3DFMT_UNKNOWN。 這表示應用程式不需要在呼叫 IDirect3D9::CreateDevice 進行視窗模式之前查詢目前的桌面格式。 針對全螢幕模式,必須指定背景緩衝區格式。 將 BackBufferCount 設定為等於零 (BackBufferCount = 0) 會產生一個後端緩衝區。
嘗試重設群組中的多個顯示介面卡時,請將 pPresentationParameters 設定為指向 D3DPRESENT_PARAMETERS 結構的陣列,一個用於介面卡群組中的每個顯示。
如果使用 D3DCREATE_ADAPTERGROUP_DEVICE建立多頭裝置, IDirect3DDevice9::Reset 需要 D3DPRESENT_PARAMETERS 結構的陣列,其中每個結構都必須指定全螢幕顯示器。 若要切換回視窗模式,應用程式必須終結裝置,並在視窗模式中重新建立非多頭裝置。
需求
目標平台 | Windows |
標頭 | d3d9helper.h (包含 D3D9.h) |
程式庫 | D3D9.lib |