Alfa Test Durumu (Direct3D 9)

C++ uygulamaları, piksellerin işleme hedef yüzeyine ne zaman yazıldığında denetlemek için alfa testi kullanabilir. uygulamanız, D3DRS_ALPHATESTENABLE işleme durumunu kullanarak geçerli Direct3D cihazını ayarlayarak her pikseli bir alfa test işlevine göre test eder. Test başarılı olursa piksel yüzeye yazılır. Aksi takdirde Direct3D pikseli yoksayar. D3DRS_ALPHAFUNC işleme durumunu kullanarak alfa testi işlevini seçin. Uygulamanız, D3DRS_ALPHAREF işleme durumu ayarını kullanarak karşılaştırma yapmak için tüm pikseller için referans bir alfa değeri ayarlayabilir.

Alfa testinin en yaygın kullanımı, neredeyse saydam olan nesneleri rasterleştirirken performansı geliştirmektir. Rasterleştirilmekte olan renk verileri belirli bir pikseldeki (D3DPCMPCAPS_GREATEREQUAL) renkten daha opaksa, piksel yazılır. Aksi takdirde, rasterizer pikseli tamamen yoksayar ve iki rengi karıştırmak için gereken işlemeyi kaydeder. Aşağıdaki kod örneği, belirli bir karşılaştırma işlevinin desteklenip desteklenmediğini denetler ve destekleniyorsa işleme sırasında performansı geliştirmek için gereken karşılaştırma işlevi parametrelerini ayarlar.

// This code example assumes that pCaps is a
// D3DCAPS9 structure that was filled with a 
// previous call to IDirect3D9::GetDeviceCaps.

if (pCaps.AlphaCmpCaps & D3DPCMPCAPS_GREATEREQUAL)
{
    dev->SetRenderState(D3DRS_ALPHAREF, (DWORD)0x00000001);
    dev->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); 
    dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);
}

// If the comparison is not supported, render anyway. 
// The only drawback is no performance gain.

Tüm donanımlar tüm alfa testi özelliklerini desteklemez. IDirect3D9::GetDeviceCaps yöntemini çağırarak cihaz özelliklerini de kontrol edebilirsiniz. Cihaz özelliklerini aldıktan sonra, istenen karşılaştırma işlevi için ilişkili D3DCAPS9 yapısının AlphaCmpCaps üyesini denetleyin. AlphaCmpCaps üyesi yalnızca D3DPCMPCAPS_ALWAYS özelliğini veya yalnızca D3DPCMPCAPS_NEVER özelliğini içeriyorsa, sürücü alfa testlerini desteklemez.

Render Durumları