Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kami menyarankan agar Anda menggunakan lapisan debug untuk men-debug aplikasi Anda untuk memastikan bahwa mereka bersih dari kesalahan dan peringatan. Lapisan debug membantu Anda menulis kode Direct3D. Selain itu, produktivitas Anda dapat meningkat ketika Anda menggunakan lapisan debug karena Anda dapat segera melihat penyebab kesalahan penyajian yang tidak jelas atau bahkan layar hitam di sumbernya. Lapisan debug memberikan peringatan untuk banyak masalah. Misalnya, lapisan debug memberikan peringatan untuk masalah ini:
- Lupa mengatur tekstur tetapi tetap membacanya di shader piksel Anda
- Kedalaman output tetapi tidak memiliki batas status stensil kedalaman
- Pembuatan tekstur gagal dengan INVALIDARG
Di sini kita berbicara tentang cara mengaktifkan lapisan debug dan beberapa masalah yang dapat Anda cegah dengan menggunakan lapisan debug.
Mengaktifkan lapisan debug
Untuk mengaktifkan lapisan debug , tentukan flag D3D11_CREATE_DEVICE_DEBUG di parameter Bendera saat Anda memanggil fungsi D3D11CreateDevice untuk membuat perangkat rendering. Contoh kode ini menunjukkan cara mengaktifkan lapisan debug saat proyek Microsoft Visual Studio Anda berada dalam build debug:
UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;
#if defined(_DEBUG)
// If the project is in a debug build, enable the debug layer.
creationFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endif
// Define the ordering of feature levels that Direct3D attempts to create.
D3D_FEATURE_LEVEL featureLevels[] =
{
D3D_FEATURE_LEVEL_11_1,
D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_10_1,
D3D_FEATURE_LEVEL_10_0,
D3D_FEATURE_LEVEL_9_3,
D3D_FEATURE_LEVEL_9_1
};
ComPtr<ID3D11Device> d3dDevice;
ComPtr<ID3D11DeviceContext> d3dDeviceContext;
DX::ThrowIfFailed(
D3D11CreateDevice(
nullptr, // specify nullptr to use the default adapter
D3D_DRIVER_TYPE_HARDWARE,
nullptr, // specify nullptr because D3D_DRIVER_TYPE_HARDWARE
// indicates that this function uses hardware
creationFlags, // optionally set debug and Direct2D compatibility flags
featureLevels,
ARRAYSIZE(featureLevels),
D3D11_SDK_VERSION, // always set this to D3D11_SDK_VERSION
&d3dDevice,
nullptr,
&d3dDeviceContext
)
);
Mencegah kesalahan di aplikasi Anda dengan lapisan debug
Jika Anda menyalahgunakan API Direct3D 11 atau meneruskan parameter buruk, output debug lapisan debug melaporkan kesalahan atau peringatan. Anda kemudian dapat memperbaiki kesalahan Anda. Selanjutnya, kita melihat beberapa masalah pengodean yang dapat menyebabkan perilaku yang tidak ditentukan atau bahkan sistem operasi mengalami crash. Anda dapat menangkap dan mencegah masalah ini dengan menggunakan lapisan debug.
Jangan mengoper penunjuk NULL ke Map
Jika Anda meneruskan NULL ke parameter pResource atau pMappedResource dari metode ID3D11DeviceContext::Map, perilaku dari Map tidak dapat ditentukan. Jika Anda membuat perangkat yang hanya mendukung lapisan inti , parameter yang tidak valid untuk Map dapat merusak sistem operasi. Jika Anda membuat perangkat yang mendukung lapisan debug, output debug melaporkan kesalahan pada panggilan Peta ini tidak valid.
Batasi kotak sumber daya dalam batas sumber daya awal dan tujuan.
Dalam panggilan ke metode ID3D11DeviceContext::CopySubresourceRegion, kotak sumber harus berada dalam sumber daya sumber. Pergeseran tujuan, (x, y, dan z) memungkinkan kotak sumber untuk digeser saat memasukkan ke dalam sumber daya tujuan, tetapi dimensi kotak sumber dan pergeseran harus sesuai dengan ukuran sumber daya. Jika Anda mencoba menyalin di luar sumber daya tujuan atau menentukan kotak sumber yang lebih besar dari sumber daya sumber, perilaku CopySubresourceRegion tidak ditentukan. Jika Anda membuat perangkat yang mendukung lapisan debug , output debug akan melaporkan kesalahan pada panggilan CopySubresourceRegion yang tidak valid ini. Parameter yang tidak valid untuk CopySubresourceRegion menyebabkan perilaku yang tidak terdefinisi dan dapat mengakibatkan rendering yang salah, pengklipan, tidak ada penyalinan, atau bahkan penghapusan perangkat rendering.
Jangan jatuhkan DiscardResource atau DiscardView
Runtime mengabaikan panggilan ke ID3D11DeviceContext1::DiscardResource atau ID3D11DeviceContext1::DiscardView kecuali jika Anda berhasil membuat sumber daya dengan benar.
Sumber daya yang Anda teruskan ke ID3D11DeviceContext1::DiscardResource harus dibuat dengan menggunakan D3D11_USAGE_DEFAULT atau D3D11_USAGE_DYNAMIC, jika tidak, runtime akan menghapus panggilan ke DiscardResource.
Sumber daya yang mendasari tampilan yang Anda teruskan ke ID3D11DeviceContext1::DiscardView harus dibuat menggunakan D3D11_USAGE_DEFAULT atau D3D11_USAGE_DYNAMIC, jika tidak, runtime akan membuang panggilan ke DiscardView.
Jika Anda membuat perangkat yang mendukung lapisan debug , output debug melaporkan kesalahan mengenai panggilan yang dihentikan.
Topik terkait