Partilhar via


Estado de teste alfa (Direct3D 9)

Os aplicativos C++ podem usar o teste alfa para controlar quando os pixels são gravados na superfície de destino de renderização. Usando o estado de renderização D3DRS_ALPHATESTENABLE, seu aplicativo define o dispositivo Direct3D atual para que ele teste cada pixel de acordo com uma função de teste alfa. Se o teste for bem-sucedido, o pixel será gravado na superfície. Se isso não acontecer, o Direct3D ignorará o pixel. Selecione a função de teste alfa com o estado de renderização D3DRS_ALPHAFUNC . Seu aplicativo pode definir um valor alfa de referência para todos os pixels a serem comparados usando o estado de renderização D3DRS_ALPHAREF.

O uso mais comum para teste alfa é melhorar o desempenho ao rasterizar objetos quase transparentes. Se os dados de cor que estão sendo rasterizados forem mais opacos do que a cor em um determinado pixel (D3DPCMPCAPS_GREATEREQUAL), o pixel será gravado. Caso contrário, o rasterizador ignora completamente o pixel, salvando o processamento necessário para mesclar as duas cores. O exemplo de código a seguir verifica se há suporte para uma determinada função de comparação e, nesse caso, define os parâmetros de função de comparação necessários para melhorar o desempenho durante a renderização.

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

Nem todo hardware dá suporte a todos os recursos de teste alfa. Você pode marcar os recursos do dispositivo chamando o método IDirect3D9::GetDeviceCaps. Depois de recuperar os recursos do dispositivo, marcar o membro AlphaCmpCaps da estrutura D3DCAPS9 associada para a função de comparação desejada. Se o membro AlphaCmpCaps contiver apenas a funcionalidade D3DPCMPCAPS_ALWAYS ou apenas a funcionalidade D3DPCMPCAPS_NEVER, o driver não oferecerá suporte a testes alfa.

Renderizar estados