Mengkueri Dukungan Buffer Kedalaman (Direct3D 9)

Seperti halnya fitur apa pun, driver yang digunakan aplikasi Anda mungkin tidak mendukung semua jenis buffer kedalaman. Selalu periksa kemampuan driver. Meskipun sebagian besar driver mendukung buffering kedalaman berbasis z, tidak semua akan mendukung buffering kedalaman berbasis w. Driver tidak gagal jika Anda mencoba mengaktifkan skema yang tidak didukung. Mereka kembali pada metode buffering kedalaman lain sebagai gantinya, atau terkadang menonaktifkan buffering kedalaman sama sekali, yang dapat mengakibatkan adegan dirender dengan artefak pengurutan kedalaman yang ekstrem.

Anda dapat memeriksa dukungan umum untuk buffer kedalaman dengan mengkueri Direct3D untuk perangkat tampilan yang akan digunakan aplikasi Anda sebelum membuat perangkat Direct3D. Jika objek Direct3D melaporkan bahwa objek mendukung buffering kedalaman, perangkat keras apa pun yang Anda buat dari objek Direct3D ini akan mendukung z-buffering.

Untuk mengkueri dukungan buffering kedalaman, Anda bisa menggunakan metode IDirect3D9::CheckDeviceFormat , seperti yang diperlihatkan dalam contoh kode berikut.

// 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 memungkinkan Anda memilih perangkat untuk dibuat berdasarkan kemampuan perangkat tersebut. Dalam hal ini, perangkat yang tidak mendukung buffer kedalaman 16-bit ditolak.

Menggunakan IDirect3D9::CheckDepthStencilMatch untuk menentukan kompatibilitas stensil kedalaman dengan target render diilustrasikan dalam contoh kode berikut.

// 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;

Ketika Anda tahu bahwa driver mendukung buffer kedalaman, Anda dapat memverifikasi dukungan w-buffer. Meskipun buffer kedalaman didukung untuk semua rasterizer perangkat lunak, w-buffer hanya didukung oleh rasterizer referensi, yang tidak cocok untuk digunakan oleh aplikasi dunia nyata. Terlepas dari jenis perangkat yang digunakan aplikasi Anda, verifikasi dukungan untuk w-buffer sebelum Anda mencoba mengaktifkan buffer kedalaman berbasis w.

  1. Setelah membuat perangkat Anda, panggil metode IDirect3DDevice9::GetDeviceCaps , melewati struktur D3DCAPS9 yang diinisialisasi.
  2. Setelah panggilan, anggota LineCaps berisi informasi tentang dukungan driver untuk merender primitif.
  3. Jika anggota RasterCaps dari struktur ini berisi bendera D3DPRASTERCAPS_WBUFFER, maka driver mendukung buffer kedalaman berbasis w untuk jenis primitif tersebut.

Buffer Kedalaman