Share via


查詢深度緩衝區支援 (Direct3D 9)

如同任何功能,您的應用程式使用的驅動程式可能不支援所有類型的深度緩衝。 請一律檢查驅動程式的功能。 雖然大部分驅動程式都支援 z 型深度緩衝,但並非所有驅動程式都支援以 w 為基礎的深度緩衝。 如果您嘗試啟用不支援的配置,驅動程式不會失敗。 它們會改用另一個深度緩衝方法,或有時會完全停用深度緩衝,這可能會導致以極端深度排序成品呈現的場景。

您可以查詢 Direct3D 來檢查深度緩衝區的一般支援,方法是查詢應用程式在建立 Direct3D 裝置之前將使用的顯示裝置。 如果 Direct3D 物件報告它支援深度緩衝,您從這個 Direct3D 物件建立的任何硬體裝置都會支援 z 緩衝處理。

若要查詢深度緩衝支援,您可以使用 IDirect3D9::CheckDeviceFormat 方法,如下列程式碼範例所示。

// The following example assumes that pCaps is a valid pointer to an 
// initialized D3DCAPS9 structure
if(FAILED(m_pD3D->CheckDeviceFormat(pCaps->AdapterOrdinal, 
                                    pCaps->DeviceType, 
                                    AdapterFormat, 
                                    D3DUSAGE_DEPTHSTENCIL, 
                                    D3DRTYPE_SURFACE,
                                    D3DFMT_D16)))
    return E_FAIL;

IDirect3D9::CheckDeviceFormat 可讓您根據該裝置的功能選擇要建立的裝置。 在此情況下,不支援 16 位深度緩衝區的裝置會遭到拒絕。

下列程式碼範例說明如何使用 IDirect3D9::CheckDepthStencilMatch 判斷與轉譯目標的深度樣板相容性。

// Reject devices that cannot create a render target of RTFormat while
// the back buffer is of RTFormat and the depth-stencil buffer is
// at least 8 bits of stencil
if(FAILED(m_pD3D->CheckDepthStencilMatch(pCaps->AdapterOrdinal,
                                        pCaps->DeviceType, 
                                        AdapterFormat, 
                                        RTFormat, 
                                        D3DFMT_D24S8)))
    return E_FAIL;

當您知道驅動程式支援深度緩衝區時,您可以驗證 w-buffer 支援。 雖然所有軟體點陣化都支援深度緩衝區,但只有參考點陣化程式才支援 w-buffer,這不適用於真實世界應用程式。 無論您的應用程式使用何種裝置類型,在您嘗試啟用 w 型深度緩衝之前,請先確認 w 緩衝區的支援。

  1. 建立裝置之後,呼叫 IDirect3DDevice9::GetDeviceCaps 方法,並傳遞初始化 的 D3DCAPS9 結構。
  2. 呼叫之後,LineCaps 成員會包含驅動程式轉譯基本類型支援的相關資訊。
  3. 如果此結構的 RasterCaps 成員包含D3DPRASTERCAPS_WBUFFER旗標,則驅動程式支援該基本類型的 w 型深度緩衝。

深度緩衝區