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.
Direct3D işlem hattı tarafından kullanılan tüm kaynaklar iki temel kaynak türünden türetilir: arabellekler ve dokuları. Arabellek, ham verilerden (öğeler) oluşan bir koleksiyondur; doku, ifadelerden oluşan bir koleksiyondur (doku öğeleri).
- Arabellek Kaynakları
- Doku Kaynaklarını
- doku türlerini
- alt kaynakları
- Güçlü ve Zayıf Yazma
- İlgili konular
Bir kaynağın düzenini (veya bellek ayak izini) tam olarak belirtmenin iki yolu vardır:
| Madde | Açıklama |
|---|---|
|
Türü |
Kaynak oluşturulduğunda türü tam olarak belirtin. |
|
Türüz |
Kaynak işlem hattına bağlı olduğunda türü tam olarak belirtin. |
Arabellek Kaynakları
Arabellek kaynağı, tam türemiş bir veri koleksiyonudur; iç olarak, bir arabellek öğeleri içerir. Bir öğe 1 ile 4 bileşenden oluşur. Öğe veri türlerine örnek olarak şunlar verilebilir: paketlenmiş veri değeri (R8G8B8A8 gibi), tek bir 8 bit tamsayı, dört 32 bit float değeri. Bu veri türleri konum vektöru, normal vektör, köşe arabelleğindeki doku koordinatı, dizin arabelleğindeki dizin veya cihaz durumu gibi verileri depolamak için kullanılır.
Arabellek yapılandırılmamış bir kaynak olarak oluşturulur. Yapılandırılmamış olduğundan, arabellek herhangi bir mipmap düzeyi içeremez, okunduğunda filtrelenmez ve çok örnekli olamaz.
Arabellek Türleri
- Köşe AraBelleği
- dizin arabelleği
- Sabit Arabellek
Köşe AraBelleği
Arabellek bir öğe koleksiyonudur; köşe arabelleği köşe başına veri içerir. En basit örnek, konum verileri gibi tek bir veri türü içeren bir köşe arabelleğidir. Aşağıdaki çizim gibi görselleştirilebilir.
Konum verilerini içeren köşe arabelleğinin 
Daha sık olarak köşe arabelleği, 3B köşeleri tam olarak belirtmek için gereken tüm verileri içerir. Bunun bir örneği, köşe başına konum, normal ve doku koordinatları içeren bir köşe arabelleği olabilir. Bu veriler genellikle aşağıdaki çizimde gösterildiği gibi köşe başına öğe kümeleri olarak düzenlenir.
Konum, normal ve doku verileriçizimi
Bu köşe arabelleği sekiz köşe için köşe başına veri içerir; her köşe üç öğe depolar (konum, normal ve doku koordinatları). Konum ve normal genellikle üç 32 bit float (DXGI_FORMAT_R32G32B32_FLOAT) ve iki 32 bit float (DXGI_FORMAT_R32G32_FLOAT) kullanılarak doku koordinatları kullanılarak belirtilir.
Bir köşe arabelleğinden verilere erişmek için hangi köşeye erişebileceğinizi ve bu diğer arabellek parametrelerini bilmeniz gerekir:
- Uzaklık - arabelleğin başlangıcından ilk köşenin verilerine kadar olan bayt sayısı. Uzaklık, IASetVertexBuffersiçin sağlanır.
- BaseVertexLocation - Uygun çizim çağrısı tarafından kullanılan ilk köşeye uzaklıktan bayt sayısı (bkz. Çizim Yöntemleri).
Köşe arabelleği oluşturmadan önce,birgiriş düzeni nesnesi oluşturarak düzenini tanımlamanız gerekir; bu, CreateInputLayoutçağrılarak yapılır. Giriş düzeni nesnesi oluşturulduktan sonra, IASetInputLayoutçağırarak bunu input-assembler aşamasına bağlayın.
Köşe arabelleği oluşturmak için createBufferçağrısında bulunur.
Dizin AraBelleği
Dizin arabelleği 16 bit veya 32 bit dizinlerden oluşan sıralı bir küme içerir; her dizin, bir köşe arabelleğindeki bir köşeyi tanımlamak için kullanılır. IA aşamasına veri sağlamak için bir veya daha fazla köşe arabelleği ile dizin arabelleği kullanmak dizin oluşturma olarak adlandırılır. Dizin arabelleği aşağıdaki çizim gibi görselleştirilebilir.
Dizin arabelleğiçizimi
Dizin arabelleğinde depolanan sıralı dizinler aşağıdaki parametrelerle birlikte bulunur:
- Uzaklık - arabelleğin başlangıcından ilk dizine kadar olan bayt sayısı. Uzaklık, IASetIndexBufferiçin sağlanır.
- StartIndexLocation - Uygun çizim çağrısı tarafından kullanılan ilk köşeye uzaklıktan bayt sayısı (bkz. Çizim Yöntemleri).
- IndexCount - oluşturulacak dizin sayısı.
Dizin arabelleği oluşturmak için CreateBufferçağrısında bulunur.
Dizin arabelleği, birden çok çizgi veya üçgen şeridi bir araya her biri şerit kesim diziniyle ayırarak bir araya gelebilir. Şerit kesme dizini, tek bir çizim çağrısıyla birden çok çizgi veya üçgen şeridin çizilmesine olanak tanır. Şerit kesim dizini, dizin için mümkün olan en yüksek değerdir (16 bit dizin için 0xffff, 32 bit dizin için 0xffffffff). Şerit kesim dizini, dizinli ilkellerdeki sargı sırasını sıfırlar ve aksi takdirde üçgen şeritte düzgün sargı sırasını korumak için gerekebilecek bozuk üçgenlere olan ihtiyacı ortadan kaldırmak için kullanılabilir. Aşağıdaki çizimde şerit kesim dizini örneği gösterilmektedir.
Şeritli dizinçizimi
Sabit Arabellek
Direct3D 10, gölgelendirici-sabit arabellek veya yalnızca sabit arabellek adı verilen gölgelendirici sabitlerini sağlamak için yeni bir arabellek kullanıma sunulmuştur. Kavramsal olarak, aşağıdaki çizimde gösterildiği gibi tek öğeli köşe arabelleği gibi görünür.
Gölgelendirici-sabit arabellekçizimi
Her öğe, depolanan verilerin biçimine göre belirlenen 1-4 bileşen sabitini depolar.
Sabit arabellekler, gölgelendirici sabitlerinin ayrı ayrı işlenmek üzere ayrı ayrı çağrılar yapmak yerine aynı anda gruplanıp işlenmesine izin vererek gölgelendirici sabitlerini güncelleştirmek için gereken bant genişliğini azaltır.
Gölgelendirici-sabit arabelleği oluşturmak için CreateBufferçağırın ve D3D10_BIND_CONSTANT_BUFFER sabit arabellek bağlama bayrağını belirtin (bkz. D3D10_BIND_FLAG).
bir gölgelendirici-sabit arabelleği işlem hattına bağlamak için şu yöntemlerden birini çağırın: GSSetConstantBuffers, PSSetConstantBuffersveya VSSetConstantBuffers.
ID3D10Effect Arabirimi arabirimi kullanılırken, sabit arabellek oluşturma, bağlama ve alma işleminin ID3D10Effect Arabirimi örneği tarafından işlendiğini unutmayın. Bu durumda, değişkenin efektinden getvariable yöntemlerinden GetVariableByName gibi tek bir yöntemle alınması ve değişkenin SetMatrixgibi SetVariable yöntemlerinden biriyle güncelleştirilmesi gerekir. Sabit bir arabelleği yönetmek için ID3D10Effect Arabirimi kullanma örneği için bkz. öğreticisi 07.
Gölgelendirici, sabit arabelleğin parçası olmayan değişkenlerin okunmasıyla aynı şekilde doğrudan değişken adıyla sabit arabellekteki değişkenleri okumaya devam eder.
Her gölgelendirici aşaması en fazla 15 gölgelendirici-sabit arabellek sağlar; her arabellek en fazla 4096 sabit tutabilir.
Akış çıkış aşamasının sonuçlarını depolamak için sabit bir arabellek kullanın.
Gölgelendiricide sabit arabellek bildirme örneği için bkz. Gölgelendirici Sabitleri (DirectX HLSL).
Doku Kaynakları
Doku kaynağı, ifadeleri depolamak için tasarlanmış yapılandırılmış bir veri koleksiyonudur. Arabelleklerden farklı olarak dokular, gölgelendirici birimleri tarafından okundukça doku örnekleyicilerine göre filtrelenebilir. Doku türü, dokunun filtrelenme şeklini etkiler. Texel, işlem hattı tarafından okunabilen veya yazılabilen en küçük doku birimini temsil eder. Her ifade, DXGI biçimlerinden birinde düzenlenmiş 1 ile 4 arasında bileşen içerir (bkz. DXGI_FORMAT).
Dokular, boyutlarının bilinmesi için yapılandırılmış bir kaynak olarak oluşturulur. Ancak, doku işlem hattına bağlı olduğunda bir görünüm kullanılarak tür tam olarak belirtildiği sürece, her doku kaynak oluşturma zamanında yazılabilir veya daha az yazılabilir.
- doku türlerini
- alt kaynakları
- Güçlü ve Zayıf Yazma
Doku Türleri
Çeşitli doku türleri vardır: 1B, 2B, 3D, her biri mipmap ile veya mipmap olmadan oluşturulabilir. Direct3D 10, doku dizilerini ve çok örnekli dokuları da destekler.
1B Doku
En basit biçimindeki bir 1B doku, tek bir doku koordinatı ile ele alınabilen doku verileri içerir; aşağıdaki çizimde gösterildiği gibi bir dizi ifade olarak görselleştirilebilir.
1b dokuçizimi
Her ifade, depolanan verilerin biçimine bağlı olarak bir dizi renk bileşeni içerir. Daha fazla karmaşıklık ekleyerek, aşağıdaki çizimde gösterildiği gibi mipmap düzeylerine sahip bir 1B doku oluşturabilirsiniz.
1b doku çizimi
Mipmap düzeyi, üzerindeki düzeyden daha küçük olan iki güçten oluşan bir dokudur. En üst düzey en fazla ayrıntıyı içerir, sonraki her düzey daha küçüktür; 1B mipmap için en küçük düzey bir ifade içerir. Farklı düzeyler LOD (ayrıntı düzeyi) adlı bir dizinle tanımlanır; Kameraya yakın olmayan geometriyi oluştururken daha küçük bir dokuya erişmek için LOD'yi kullanabilirsiniz.
1B Doku Dizisi
Direct3D 10 ayrıca bir doku dizisi için yeni bir veri yapısına sahiptir. 1B dokulardan oluşan bir dizi kavramsal olarak aşağıdaki çizime benzer.
1b doku dizisiçizimi
Bu doku dizisi üç doku içerir. Üç dokudan her birinin doku genişliği 5'tir (bu, ilk katmandaki öğelerin sayısıdır). Her doku 3 katmanlı bir mipmap de içerir.
Direct3D'deki tüm doku dizileri homojen bir doku dizisidir; bu, doku dizisindeki her dokunun aynı veri biçimine ve boyutuna (doku genişliği ve mipmap düzeylerinin sayısı dahil) sahip olması gerektiği anlamına gelir. Her dizideki tüm dokular boyut olarak eşleştiğinden farklı boyutlarda doku dizileri oluşturabilirsiniz.
2B Doku ve 2B Doku Dizisi
Texture2D kaynağı, 2B bir texel kılavuzu içerir. Her ifade u, v vektör tarafından adreslenebilir. Doku kaynağı olduğundan mipmap düzeyleri ve alt kaynaklar içerebilir. Tam olarak doldurulmuş bir 2B doku kaynağı aşağıdaki çizime benzer.
2b doku kaynağıçizimi
Bu doku kaynağı, üç mipmap düzeyine sahip tek bir 3x5 doku içerir.
Texture2DArray kaynağı, 2B dokulardan oluşan homojen bir dizidir; diğer bir ifadeyle, her doku aynı veri biçimine ve boyutlarına sahiptir (mipmap düzeyleri dahil). Dokuların artık 2B veri içermesi dışında, 1B doku dizisiyle benzer bir düzene sahiptir ve bu nedenle aşağıdaki çizime benzer.
Bu doku dizisi üç doku içerir; her doku, iki mipmap düzeyiyle 3x5'tir.
Doku Küpü Olarak Doku2DArray Kullanma
Doku küpü, küpünün her yüzü için bir tane olmak üzere 6 doku içeren bir 2B doku dizisidir. Tam olarak doldurulmuş bir doku küpü aşağıdaki çizime benzer.
6 doku içeren bir 2B doku dizisi, küp dokusu görünümüyle işlem hattına bağlandıktan sonra küp eşleme iç işlevleriyle gölgelendiricilerin içinden okunabilir. Doku küpleri, doku küpünün merkezinden işaret eden bir 3B vektörle gölgelendiriciden ele alınır.
3B Doku
Doku3D kaynağı (birim dokusu olarak da bilinir), 3B bir ifade hacmi içerir. Doku kaynağı olduğundan mipmap düzeyleri içerebilir. Tam olarak doldurulmuş 3B doku aşağıdaki çizime benzer.
3b doku kaynağıçizimi
Bir 3B doku mipmap dilimi bir işleme hedefi çıkışı (işleme hedefi görünümü ile) olarak bağlandığında, 3B doku n dilimli bir 2B doku dizisiyle aynı şekilde davranır. Belirli işleme dilimi, çıktı verilerinin skaler bir bileşeni sistem-değeri olarak SV_RenderTargetArrayIndex bildirilerek geometri gölgelendirici aşamasından seçilir.
3B doku dizisi kavramı yoktur; bu nedenle 3B doku alt kaynağı tek bir mipmap düzeyidir.
Alt kaynaklar
Direct3D 10 API tüm kaynaklara veya kaynakların alt kümelerine başvurur. Kaynakların bir kısmını belirtmek için Direct3D, alt kaynaklar terimini (bir kaynağın alt kümesi anlamına gelir) uydurmuştur.
Arabellek tek bir alt kaynak olarak tanımlanır. Dokular biraz daha karmaşıktır çünkü bazıları mipmap düzeylerini ve/veya doku dizilerini destekleyen birkaç farklı doku türü (1B, 2B vb.) vardır. En basit durumdan başlayarak, 1B doku, aşağıdaki çizimde gösterildiği gibi tek bir alt kaynak olarak tanımlanır.
1b dokuçizimi
Bu, 1B dokuyu oluşturan texel dizisinin tek bir alt kaynakta yer aldığı anlamına gelir.
Bir 1B dokuyu üç mipmap düzeyiyle genişletirseniz, bu şekilde görselleştirilebilir.
1b doku çizimi
Bunu üç alt metinden oluşan tek bir doku olarak düşünün. Her alt metin bir alt kaynak olarak sayılır, bu nedenle bu 1B doku 3 alt kaynak içerir. Bir alt metin (veya alt kaynak) tek bir doku için ayrıntı düzeyi (LOD) kullanılarak dizinlenebilir. Doku dizisini kullanırken, belirli bir alt metine erişmek için hem LOD hem de belirli doku gerekir. Alternatif olarak, API bu iki bilgi parçasını burada gösterildiği gibi sıfır tabanlı tek bir alt kaynak dizininde birleştirir.
Sıfır tabanlı alt kaynak diziniçizimi
Alt Kaynakları Seçme
Bazı API'ler kaynağın tamamına erişir (örneğin CopyResource), diğerleri kaynağın bir bölümüne erişir (örneğin UpdateSubresource veya CopySubresourceRegion). Kaynağın bir bölümüne erişen API'ler genellikle erişecek alt kaynakları belirtmek için bir görünüm açıklaması (D3D10_TEX2D_ARRAY_DSVgibi) kullanır.
Bu şekiller, bir doku dizisine erişirken görünüm açıklaması tarafından kullanılan terimleri gösterir.
Dizi Dilimi
Bir doku dizisi verildiğinde, mipmap'leri olan her doku, aşağıdaki çizimde gösterildiği gibi bir dizi dilimi (beyaz dikdörtgen tarafından temsil edilir) bir dokuyu ve tüm alt metinlerini içerir.
Dizi spliceçizimi
Mip Dilimi
Aşağıdaki çizimde gösterildiği gibi, bir mip dilimi (beyaz dikdörtgenle temsil edilir) bir dizideki her doku için bir mipmap düzeyi içerir.
Mip spliceçizimi
Tek Bir Alt Kaynak Seçme
Aşağıdaki çizimde gösterildiği gibi, tek bir alt kaynak seçmek için bu iki dilim türünü kullanabilirsiniz.
kullanarak alt kaynak seçme çizimi
Birden Çok Alt Kaynak Seçme
İsterseniz, birden çok alt kaynak seçmek için bu iki dilim türünü mipmap düzeylerinin sayısı ve/veya doku sayısıyla kullanabilirsiniz.
Birden çok alt kaynak seçmeçizimi
Mipmaps ile veya doku dizisi olmadan hangi doku türünü kullandığınızdan bağımsız olarak, belirli bir alt kaynağın dizinini hesaplamak için D3D10CalcSubresourceyardımcı işlevini kullanabilirsiniz.
Güçlü ve Zayıf Yazma Karşılaştırması
Tam türe sahip bir kaynak oluşturmak, kaynağı oluşturulduğu biçimle kısıtlar. Bu, özellikle kaynak uygulama tarafından eşlenemeyeceğini belirten bayraklarla oluşturulduysa, çalışma zamanının erişimi iyileştirmesini sağlar eşlenemez. Belirli bir türle oluşturulan kaynaklar, görünüm mekanizması kullanılarak yeniden yorumlanamaz.
Daha az türde bir kaynakta, kaynak ilk oluşturulduğunda veri türü bilinmez. Uygulamanın kullanılabilir tür daha az biçimlerinden birini seçmesi gerekir (bkz. DXGI_FORMAT). Ayrılacak belleğin boyutunu ve çalışma zamanının bir mipmap içinde alt metin oluşturması gerekip gerekmeyeceğini belirtmeniz gerekir. Ancak, tam veri biçimi (belleğin tamsayılar, kayan nokta değerleri, işaretsiz tamsayılar vb. olarak yorumlanıp yorumlanmayacağı) kaynak bir görünümle işlem hattına bağlanana kadar belirlenemez. Doku biçimi, doku işlem hattına bağlanana kadar esnek kaldığından, kaynak zayıf türlenmiş depolama olarak adlandırılır. Zayıf türü belirlenmiş depolama, yeni biçimin bileşen biti eski biçimin bit sayısıyla eşleşdiği sürece yeniden kullanılabilir veya yeniden yorumlanabilir (başka bir biçimde) avantajına sahiptir.
Her birinin benzersiz bir görünümü olduğu ve her konumdaki biçimleri tam olarak niteleyen tek bir kaynak birden çok işlem hattı aşamasına bağlanabilir. Örneğin, DXGI_FORMAT_R32G32B32A32_TYPELESS biçimiyle oluşturulan bir kaynak, işlem hattının farklı konumlarında aynı anda DXGI_FORMAT_R32G32B32A32_FLOAT ve DXGI_FORMAT_R32G32B32A32_UINT olarak kullanılabilir.
İlgili konular