Condividi tramite


Stato di test alfa (Direct3D 9)

Le applicazioni C++ possono usare test alfa per controllare quando i pixel vengono scritti nella superficie di destinazione di rendering. Usando lo stato di rendering D3DRS_ALPHATESTENABLE , l'applicazione imposta il dispositivo Direct3D corrente in modo che testa ogni pixel in base a una funzione di test alfa. Se il test ha esito positivo, il pixel viene scritto nella superficie. In caso contrario, Direct3D ignora il pixel. Selezionare la funzione di test alfa con lo stato di rendering D3DRS_ALPHAFUNC . L'applicazione può impostare un valore alfa di riferimento per tutti i pixel da confrontare usando lo stato di rendering D3DRS_ALPHAREF .

L'uso più comune per i test alfa consiste nel migliorare le prestazioni quando si rasterizzazione di oggetti quasi trasparenti. Se i dati di colore che vengono rasterizzati sono più opachi del colore in un determinato pixel (D3DPCMPCAPS_GREATEREQUAL), il pixel viene scritto. In caso contrario, il rasterizer ignora completamente il pixel, salvando l'elaborazione necessaria per fondere i due colori. L'esempio di codice seguente verifica se una determinata funzione di confronto è supportata e, in tal caso, imposta i parametri della funzione di confronto necessari per migliorare le prestazioni durante il rendering.

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

Non tutti gli hardware supportano tutte le funzionalità di test alfa. È possibile controllare le funzionalità del dispositivo chiamando il metodo IDirect3D9::GetDeviceCaps . Dopo aver recuperato le funzionalità del dispositivo, controllare il membro della struttura AlfaCmpCaps associato alla struttura D3DCAPS9 per la funzione di confronto desiderata. Se il membro AlphaCmpCaps contiene solo la funzionalità D3DPCMPCAPS_ALWAYS o solo la funzionalità di D3DPCMPCAPS_NEVER, il driver non supporta i test alfa.

Stati di rendering