Sdílet prostřednictvím


Stav alfa testování (Direct3D 9)

Aplikace jazyka C++ můžou použít alfa testování k řízení, kdy jsou pixely zapsány na plochu cíle vykreslení. Pomocí D3DRS_ALPHATESTENABLE vykreslovacího stavu aplikace nastaví aktuální zařízení Direct3D tak, aby testoval každý pixel podle alfa testovací funkce. Pokud je test úspěšný, pixel se zapíše na povrch. Pokud ne, Direct3D pixel ignoruje. Vyberte funkci alfa testu se stavem vykreslování D3DRS_ALPHAFUNC. Vaše aplikace může nastavit referenční alfa hodnotu pro všechny pixely, které se mají porovnat pomocí stavu vykreslení D3DRS_ALPHAREF.

Nejběžnějším použitím alfa testování je zlepšení výkonu při rastrování objektů, které jsou téměř transparentní. Pokud jsou rastrová barevná data neprůhlednější než barva v daném pixelu (D3DPCMPCAPS_GREATEREQUAL), pixel se zapíše. Jinak rastrovač pixel zcela ignoruje, čímž se ušetří zpracování potřebné k prolnutí dvou barev. Následující příklad kódu zkontroluje, jestli je daná funkce porovnání podporovaná, a pokud ano, nastaví parametry funkce porovnání potřebné ke zlepšení výkonu při vykreslování.

// 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.

Ne veškerý hardware podporuje všechny funkce alfatestování. Funkce zařízení můžete zkontrolovat voláním metody IDirect3D9::GetDeviceCaps. Po načtení schopností zařízení zkontrolujte přidruženou D3DCAPS9 strukturu AlphaCmpCaps člen požadované funkce porovnání. Pokud člen AlphaCmpCaps obsahuje pouze D3DPCMPCAPS_ALWAYS schopnost nebo pouze D3DPCMPCAPS_NEVER schopnost, ovladač nepodporuje alfa testy.

Stavy vykreslování