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.
Bu konu, Efektler 10 ile Efektler 11 arasındaki farkları gösterir.
Cihaz Bağlamları, İş Parçacığı Oluşturma ve Kopyalama
ID3D10Device arabirimi Direct3D 11'de iki arabirime ayrılmıştır: ID3D11Device ve ID3D11DeviceContext. Birden çok iş parçacığında eşzamanlı yürütmeyi kolaylaştırmak için birden çok ID3D11DeviceContext oluşturabilirsiniz. Effects 11, bu kavramı Efektler çerçevesine genişletir.
Efektler 11 çalışma zamanı tek iş parçacıklı. Bu nedenle, aynı anda birden çok iş parçacığıyla tek bir ID3DX11Effect örneği kullanmamalısınız.
Efektler 11 çalışma zamanını birden çok örnekte kullanmak için ayrı ID3DX11Effect örnekleri oluşturmanız gerekir. ID3D11DeviceContext de tek iş parçacıklı olduğundan, Apply üzerindeki her efekt örneğine farklı ID3D11DeviceContext örnekleri geçirmeniz gerekir. bu ayrı cihaz bağlamlarını kullanarak komut listeleri oluşturabilirsiniz, böylece işleme iş parçacığı bunları anında cihaz bağlamı üzerinde uygulayabilir.
Birden çok iş parçacığında kullanmak üzere aynı işlevi kapsülleyen birden çok efekt oluşturmanın en kolay yolu, tek bir etki oluşturmak ve ardından kopyalanan kopyalar oluşturmaktır. Kopyalama, sıfırdan birden çok kopya oluşturmaya göre aşağıdaki avantajlara sahiptir:
- Kopyalama yordamı, oluşturma yordamından daha hızlıdır.
- Kopyalanan efektler oluşturulan gölgelendiricileri, durum bloklarını ve sınıf örneklerini paylaşır (bu nedenle yeniden oluşturulması gerekmez).
- Kopyalanan efektler sabit arabellekleri paylaşabilir.
- Kopyalanan efektler geçerli efektle eşleşen durumla başlar (en iyi duruma getirilip getirilmediği fark etmeksizin değişken değerler).
Daha fazla bilgi için bkz. Efekt Kopyalama.
Efekt Havuzları ve Grupları
Direct3D 10'da efekt havuzlarının açık ara en yaygın kullanımı gruplandırma malzemeleriydi. Efekt Havuzları Efekt 11'den kaldırılmış ve gruplar eklenmiştir. Bu, malzemeleri gruplandırmada daha verimli bir yöntemdir.
Efekt grubu basit bir teknik kümesidir. Daha fazla bilgi için bkz. Efekt Grubu Söz Dizimi (Direct3D 11).
Dört alt efekt ve bir efekt havuzu ile aşağıdaki efekt hiyerarşisini göz önünde bulundurun:
// Effect Pool
cbufer A { ... }
PixelShader pPSGrass;
PixelShader pPSWater;
// Effect Child 1
#include "EffectPool.fx"
technique10 GrassMaterialLowSpec { ... }
// Effect Child 2
#include "EffectPool.fx"
technique10 GrassMaterialHighSpec { ... }
// Effect Child 3
#include "EffectPool.fx"
technique10 WaterMaterialLowSpec { ... }
// Effect Child 4
#include "EffectPool.fx"
technique10 WaterMaterialHighSpec { ... }
Efektler 11'de grupları kullanarak aynı işlevi elde edebilirsiniz:
cbufer A { ... }
PixelShader pPSGrass;
PixelShader pPSWater;
fxgroup GrassMaterial
{
technique10 LowSpec { ... }
technique10 HighSpec { ... }
}
fxgroup WaterMaterial
{
technique10 LowSpec { ... }
technique10 HighSpec { ... }
}
Yeni Gölgelendirici Aşamaları
Direct3D 11'de üç yeni gölgelendirici aşaması vardır: gövde gölgelendiricisi, etki alanı gölgelendiricisi ve işlem gölgelendiricisi. Efektler 11 bunları köşe gölgelendiricilerine, geometri gölgelendiricilerine ve piksel gölgelendiricilerine benzer şekilde işler.
Efektler 11'e üç yeni değişken türü eklendi:
- HullShader
- DomainShader
- ComputeShader
Bu gölgelendiricileri bir teknikte kullanıyorsanız, bu tekniği "technique10" değil "technique11" olarak etiketlemeniz gerekir. İşlem gölgelendiricisi, diğer grafik durumlarıyla (diğer gölgelendiriciler, durum blokları veya işleme hedefleri) aynı geçişte ayarlanamaz.
Yeni Doku Türleri
Direct3D 11 aşağıdaki doku türlerini destekler:
Sıralanmamış Erişim Görünümleri
Efektler 11, yeni sıralanmamış erişim görünümü türlerinin alınıp ayarlanmasını destekler. Bu, dokularla benzer şekilde çalışır.
Şu Efektler HLSL örneğini göz önünde bulundurun:
RWTexture1D<float> myUAV;
Bu değişkeni C++ dilinde aşağıdaki gibi ayarlayabilirsiniz:
ID3D11UnorderedAccessView* pUAVTexture1D = NULL;
ID3DX11EffectUnorderedAccessViewVariable* pUAVVar;
pUAVVar = pEffect->GetVariableByName("myUAV")->AsUnorderedAccessView();
pUAVVar->SetUnorderedAccessView( pUAVTexture1D );
Direct3D 11 aşağıdaki sıralanmamış erişim görünümü türlerini destekler:
- RWBuffer
- RWByteAddressBuffer
- RWStructuredBuffer
- RWTexture1D
- RWTexture1DArray
- RWTexture2D
- RWTexture2DArray
- RWTexture3D
Arabirimler ve Sınıf Örnekleri
Arabirim ve sınıf söz dizimi için bkz. arabirimler ve sınıflar .
Arabirimleri ve sınıfları efektlerde kullanmak için bkz. Arabirimler ve Efektlerdeki Sınıflar.
Adreslenebilir Akış Çıkışı
Direct3D 10'da geometri gölgelendiricileri akış çıkış birimine ve rasterleştirici birimine bir veri akışı çıkışı yapabilir. Direct3D11'de, geometri gölgelendiricileri akış çıkış birimine en fazla dört veri akışı ve bu akışlardan en fazla birini rasterleştirici birimine verebilir. ConstructGSWithSO iç bu yeni işlevselliği yansıtacak şekilde güncelleştirildi.
Daha fazla bilgi için bkz. Stream Out Söz Dizimi.
Cihaz Durumunu Ayarlama ve Sıfırlama
Efektler 10'da, id3D10EffectConstantBuffer::SetConstantBuffer ve SetTextureBuffer işlevlerini kullanarak sabit arabellekleri ve doku arabelleklerini kullanıcı tarafından yönetilebilir hale getirebilirsiniz. Bu işlevleri çağırdıktan sonra, Efektler 10 çalışma zamanı artık sabit arabelleği veya doku arabelleği yönetmez ve kullanıcının ID3D10Device arabirimini kullanarak verileri doldurması gerekir.
Efektler 11'de, aşağıdaki çağrıları kullanarak durum bloklarını (harmanlama durumu, rasterizer durumu, derinlik kalıbı durumu ve örnekleyici durumu) kullanıcı tarafından yönetebilirsiniz:
- ID3DX11EffectBlendVariable::SetBlendState
- ID3DX11EffectRasterizerVariable::SetRasterizerState
- ID3DX11EffectDepthStencilVariable::SetDepthStencilState
- ID3DX11EffectSamplerVariable::SetSampler
Bu işlevleri çağırdıktan sonra, Efektler 11 çalışma zamanı artık durum bloğu değişkenlerini yönetmez ve değerler değişmeden kalır. Durum blokları sabit olduğundan, kullanıcının değerleri değiştirmek için yeni bir durum bloğu ayarlaması gerektiğini unutmayın.
Ayrıca sabit arabellekleri, doku arabelleklerini ve durum bloklarını kullanıcı tarafından yönetilmeyen duruma geri döndürebilirsiniz. Bu değişkenlerin kümesini açarsanız, Efektler 11 çalışma zamanı gerektiğinde bunları güncelleştirmeye devam eder. Kullanıcı tarafından yönetilen değişkenleri ayarlamak için aşağıdaki çağrıları kullanabilirsiniz:
- ID3DX11EffectConstantBuffer::UndoSetConstantBuffer
- ID3DX11EffectConstantBuffer::UndoSetTextureBuffer
- ID3DX11EffectBlendVariable::UndoSetBlendState
- ID3DX11EffectRasterizerVariable::UndoSetRasterizerState
- ID3DX11EffectDepthStencilVariable::UndoSetDepthStencilState
- ID3DX11EffectSamplerVariable::UndoSetSampler
Efektler Sanal Makinesi
İşlevlerin dışındaki karmaşık ifadeleri değerlendiren efektler sanal makinesi kaldırıldı.
Aşağıdaki karmaşık ifade örnekleri desteklenmez:
- SetPixelShader( myPSArray( i * 3 + j ) );
- SetPixelShader( myPSArray( (float)i );
- FİlTRE = i + 2;
Aşağıdaki karmaşık olmayan ifade örnekleri desteklenir:
- SetPixelShader( myPS );
- SetPixelShader( myPS[i] );
- SetPixelShader( myPS[ uIndex ] ); uIndex bir uint değişkenidir
- FİlTRE = i;
- FILTER = ANISOTROPIK;
Bu ifadeler durum bloğu ifadelerinde (FILTER gibi) ve geçiş ifadelerinde (SetPixelShader gibi) görünebilir.
Kaynak Kullanılabilirliği ve Konumu
Efektler 10, D3D10.dlldağıtılmıştır. Efektler 11, derlemek için ilgili Visual Studio çözümleriyle birlikte kaynak olarak dağıtılır. Efekt türü uygulamalar oluşturduğunuzda, Efektler 11 kaynağını doğrudan bu uygulamalara eklemenizi öneririz.
Direct3D 11 güncelleştirme içinEfektler'den Efektler 11'i alabilirsiniz.
İlgili konular