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.
Tópicos relacionados