Состояние альфа-тестирования (Direct3D 9)

Приложения C++ могут использовать альфа-тестирование для управления записью пикселей на целевую поверхность отрисовки. С помощью состояния отрисовки D3DRS_ALPHATESTENABLE ваше приложение настраивает текущее устройство Direct3D для тестирования каждого пикселя в соответствии с функцией альфа-теста. Если тест выполнен успешно, пиксель записывается на поверхность. Если это не так, Direct3D игнорирует пиксель. Выберите функцию альфа-теста с состоянием D3DRS_ALPHAFUNC рендеринга. Приложение может задать эталонное альфа-значение для всех пикселей, чтобы осуществлять сравнение, с помощью состояния рендеринга D3DRS_ALPHAREF.

Наиболее распространенное использование альфа-тестирования заключается в повышении производительности при растеризации объектов, которые почти прозрачны. Если растровые данные цвета более непрозрачны, чем цвет на заданном пикселе (D3DPCMPCAPS_GREATEREQUAL), то пиксель записывается. В противном случае растризатор игнорирует пиксель полностью, сохраняя обработку, необходимую для смешивания двух цветов. В следующем примере кода проверяется, поддерживается ли данная функция сравнения и, если да, она задает параметры функции сравнения, необходимые для повышения производительности во время отрисовки.

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

Не все оборудование поддерживает все функции альфа-тестирования. Вы можете проверить возможности устройства, вызвав метод IDirect3D9::GetDeviceCaps. После определения возможностей устройства проверьте член AlphaCmpCaps в связанной структуре D3DCAPS9 для требуемой функции сравнения. Если элемент AlphaCmpCaps содержит только возможность D3DPCMPCAPS_ALWAYS или только возможность D3DPCMPCAPS_NEVER, драйвер не поддерживает альфа-тесты.

Состояния рендеринга