Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Hatalardan ve uyarılardan arındırıldığından emin olmak için uygulamalarınızda hata ayıklamak için hata ayıklama katmanı kullanmanızı öneririz. Hata ayıklama katmanı Direct3D kodu yazmanıza yardımcı olur. Ayrıca, hata ayıklama katmanını kullandığınızda üretkenliğiniz artabilir çünkü belirsiz işleme hatalarının nedenlerini ve hatta kaynaklarında siyah ekranları hemen görebilirsiniz. Hata ayıklama katmanı birçok sorun için uyarılar sağlar. Örneğin, hata ayıklama katmanı şu sorunlar için uyarılar sağlar:
- Bir doku ayarlamayı unuttum ama piksel gölgelendiricinizde ondan okuma
- Çıkış derinliği ancak derinlik ve şablon durumu tanımlanmamış.
- Doku oluşturma INVALIDARG ile başarısız oldu
Burada hata ayıklama katmanının nasıl etkinleştirileceği ve hata ayıklama katmanını kullanarak önleyebileceğiniz bazı sorunlar hakkında konuşacağız.
- Hata ayıklama katmanını etkinleştirme
-
Hata ayıklama katmanıyla uygulamanızda hataları önleme
- Map'e NULL pointer geçirmeyin
- Kaynak ve hedef kaynaklar içindeki kaynak kutusunu sınırlama
- DiscardResource veya DiscardView'ı bırakma
- İlgili konular
Hata ayıklama katmanını etkinleştirme
hata ayıklama katmanını etkinleştirmek için, işleme cihazını oluşturmak için D3D11CreateDevice işlevini çağırdığınızda Bayraklar parametresinde D3D11_CREATE_DEVICE_DEBUG bayrağını belirtin. Bu örnek kod, Microsoft Visual Studio projeniz bir hata ayıklama derlemesindeyken hata ayıklama katmanının nasıl etkinleştirileceği gösterir:
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
)
);
Hata ayıklama katmanıyla uygulamanızdaki hataları önleme
Direct3D 11 API'sini kötüye kullanırsanız veya hatalı parametreler geçirirseniz, hata ayıklama katmanının hata ayıklama çıktısı bir hata veya uyarı bildirir. Daha sonra hatanızı düzeltebilirsiniz. Ardından tanımsız davranışa ve hatta işletim sisteminin kilitlenmesine neden olabilecek bazı kodlama sorunlarına göz atacağız. Hata ayıklama katmanını kullanarak bu sorunları yakalayabilir ve önleyebilirsiniz.
Haritaya NULL işaretçileri geçirmeyin
ID3D11DeviceContext::Map yönteminin pResource veya pMappedResource parametresine NULL geçirirseniz, Eşleme davranışı tanımlanmamış olur. çekirdek katmanını destekleyen bir cihaz oluşturduysanız, Map için geçersiz parametreler işletim sistemini kilitleyebilir. hata ayıklama katmanını destekleyen bir cihaz oluşturduysanız, hata ayıklama çıktısı bu geçersiz Eşleme çağrısında bir hata bildirir.
Kaynak ve hedef kaynaklar içindeki kaynak kutusunu sınırlama
ID3D11DeviceContext::CopySubresourceRegion yöntemine yapılan çağrıda, kaynak kutunun kaynak kaynağın içinde olması gerekir. Hedef uzaklıklar (x, y ve z), hedef kaynağa yazarken kaynak kutunun uzaklığını sağlar, ancak kaynak kutunun boyutları ve uzaklıklar kaynağın boyutu içinde olmalıdır. Hedef kaynağın dışına kopyalamaya veya kaynak kaynaktan daha büyük bir kaynak kutusu belirtmeye çalışırsanız, CopySubresourceRegion davranışı tanımlanmamıştır. hata ayıklama katmanını destekleyen bir cihaz oluşturduysanız, hata ayıklama çıktısı bu geçersiz CopySubresourceRegion çağrısıyla ilgili bir hata bildirir. CopySubresourceRegion için geçersiz parametreler tanımsız davranışa neden olur ve yanlış işleme, kırpma, kopya olmaması ve hatta işleme cihazının kaldırılmasına neden olabilir.
DiscardResource veya DiscardView'ı bırakmayın
Çalışma zamanı, kaynağı doğru oluşturmadığınız sürece ID3D11DeviceContext1::DiscardResource veya ID3D11DeviceContext1::DiscardView çağrısını yapmaz.
id3D11DeviceContext1::D iscardResourcegeçirdiğiniz kaynağın D3D11_USAGE_DEFAULT veya D3D11_USAGE_DYNAMICkullanılarak oluşturulmuş olması gerekir; aksi takdirde çalışma zamanı çağrıyı DiscardResource'a bırakır.
ID3D11DeviceContext1::D iscardViewgeçirdiğiniz görünümün altında yer alan kaynak, D3D11_USAGE_DEFAULT veya D3D11_USAGE_DYNAMICkullanılarak oluşturulmuş olmalıdır; aksi takdirde çalışma zamanı çağrıyı DiscardView'a bırakır.
hata ayıklama katmanını destekleyen bir cihaz oluşturduysanız, hata ayıklama çıkışı bırakılan çağrıyla ilgili bir hata bildirir.
İlgili konular