Aracılığıyla paylaş


Two-Sided Kalıbı (Direct3D 9)

Gölge Birimler, kalıp arabelleği ile gölge çizmek için kullanılır. Uygulama, siluet kenarlarını hesaplayıp ışıktan 3B birimler kümesine çıkararak geometriyi tıkayarak gölge birimleri hesaplar. Bu birimler daha sonra kalıp arabelleğine iki kez işlenir.

İlk işleme, ileriye dönük çokgenler çizer ve kalıp-arabellek değerlerini artırır. İkinci işleme, gölge birimin arkaya dönük çokgenlerini çizer ve kalıp arabellek değerlerini azaltıyor. Normalde, tüm artımlı ve azalan değerler birbirini iptal eder. Ancak, sahne zaten normal geometriyle işlendi ve gölge birim işlenirken bazı piksellerin z-arabellek testini başarısız olmasına neden oldu. Kalıp arabelleğinde kalan değerler, gölgedeki piksellere karşılık gelir. Bu kalan kalıp-arabellek içerikleri, büyük, tümü kapsayan siyah dörtlüleri sahnenin içine alfa-harmanlama amacıyla maske olarak kullanılır. Kalıp arabelleği maske görevi görürken, sonuç gölgelerdeki pikselleri karartmaktır.

Bu, gölge geometrinin ışık kaynağı başına iki kez çizildiği ve bu nedenle GPU'nun köşe aktarım hızına baskı yaptığı anlamına gelir. İki taraflı kalıp özelliği bu durumu azaltmak için tasarlanmıştır. Bu yaklaşımda iki kalıp durumu kümesi vardır (aşağıda adlandırılmıştır), biri öne dönük üçgenler için, diğeri de arkaya dönük üçgenler için ayarlanmıştır. Bu şekilde, gölge birimi başına, ışık başına yalnızca tek bir geçiş çizilir.

API değişiklikleri yeni bir işleme durumları kümesiyle sınırlıdır. Yeni işleme durumu D3DRS_Two_Sided_StencilMODE TRUE veya FALSE olarak ayarlanabilir. Varsayılan olarak FALSE , yani geçerli (DirectX 8) davranışıdır. Bu TRUE olarak ayarlandığında (yalnızca D3DSTENCILCAPS_TWOSIDED ayarlanırsa çalışır), aşağıdaki işleme durumları yalnızca ön (saat yönünde) üçgenlere uygulanır.

İşleme durumu Açıklama
D3DRS_STENCILFAIL Kalıp testi başarısız olursa yapılacak D3DSTENCILOP.
D3DRS_STENCILZFAIL Kalıp testi geçerse ve z testi başarısız olursa yapılacak D3DSTENCILOP.
D3DRS_STENCILPASS Hem kalıp hem de z-testleri geçerse yapılacak D3DSTENCILOP.
D3DRS_STENCILFUNC D3DCMPFUNC fn. Kalıp Testi, ((başvuru & maske) kalıbı (kalıp & maske)) doğruysa geçer.

 

Yeni bir işleme durumları kümesi, arkaya dönük (saat yönünün tersine) üçgenlere uygulanır.

İşleme durumu Açıklama
D3DRS_CCW_STENCILFAIL Kalıp testi başarısız olursa yapılacak D3DSTENCILOP.
D3DRS_CCW_STENCILZFAIL Kalıp testi geçerse ve z testi başarısız olursa yapılacak D3DSTENCILOP.
D3DRS_CCW_STENCILPASS Hem kalıp hem de z-testleri geçerse yapılacak D3DSTENCILOP.
D3DRS_CCW_STENCILFUNC D3DCMPFUNC işlevi. Kalıp testi, ((başvuru & maske) kalıbı (kalıp & maske)) doğruysa geçer.

 

Kalan kalıp işleme durumları her zaman hem saat yönünde hem de saat yönünün tersine üçgenlere uygulanır.

D3DRS_Two_Sided_StencilMODE satırlar ve nokta sprite'leri için yoksayılır; bu da davranışın DirectX 8'den değişmediği anlamına gelir. D3DRS_CCW_STENCIL* işleme durumları yoksayılır.

Yeni bir cap biti, cihazın bu özelliği desteklenip desteklemediğini gösterir. Bu özelliği desteklemeyen sürücülerin bu yeni işleme durumlarını yoksayması beklenir. Diğer tüm kalıp üst sınırı bitleri her iki kalıp arabelleği modu için de geçerlidir. Two_Sided_Stencil, D3DCULLMODE_NONE kümesiyle çizim yapma özelliğini ifade ettiğinden, bu yeni kalıp modunu destekliyorsa ilgili üst sınırın sürücü tarafından ayarlanması gerekir. Microsoft Windows Donanım Kalitesi Laboratuvarları (WHQL) bunu zorunlu kılmalıdır.

Yeni işleme durumları:

D3DRS_Two_Sided_StencilMODE // BOOL (default is FALSE)
D3DRS_CCW_STENCILFAIL     // Same default as D3DRS_STENCILFAIL
D3DRS_CCW_STENCILZFAIL    // Same default as D3DRS_STENCILZFAIL
D3DRS_CCW_STENCILPASS     // Same default as D3DRS_STENCILPASS
D3DRS_CCW_STENCILFUNC     // Same default as D3DRS_STENCILFUNC

Yeni üst sınır:

D3DSTENCILCAPS_TWOSIDED // a flag on D3DCAPS9.StencilCaps

Kalıp Arabellek Teknikleri

D3DRENDERSTATETYPE