IDirect3DDevice9::Reset 方法 (d3d9.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::TestCo) 呼叫D3DERR_DEVICENOTRESET傳回值所 D3DERR_DEVICELOST指出 ::TestCo) 。 如需在遺失裝置內容中使用 IDirect3DDevice9::Reset 的進一步資訊,請參閱 IDirect3DDevice9::TestCo (Direct3D 9) 。
呼叫 IDirect3DDevice9::Reset 會導致所有紋理記憶體表面遺失、從視訊記憶體排清 Managed 紋理,以及遺失所有狀態資訊。 在呼叫裝置的 IDirect3DDevice9::Reset 方法之前,應用程式應該釋放與裝置相關聯的任何明確轉譯目標、深度樣板表面、其他交換鏈結、狀態區塊,以及D3DPOOL_DEFAULT資源。
交換鏈結有兩種不同的類型:全螢幕或視窗化。 如果新的交換鏈結為全螢幕,配接器將會置於符合新大小的顯示模式中。
Direct3D 9 應用程式預期會在呼叫期間傳送訊息 (,例如,在此呼叫傳回) 之前;應用程式應該採取預防措施,不要目前呼叫 Direct3D。 此外,當 IDirect3DDevice9::Reset 失敗時,唯一可以呼叫的有效方法是 IDirect3DDevice9::Reset、 IDirect3DDevice9::TestCovel,以及各種 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 |
標頭 | d3d9.h (包含 D3D9.h) |
程式庫 | D3D9.lib |