Alpha 测试状态 (Direct3D 9)

C++ 应用程序可以使用 alpha 测试来控制何时将像素写入呈现目标图面。 通过使用 D3DRS_ALPHATESTENABLE 呈现状态,应用程序设置当前 Direct3D 设备,以便根据 alpha 测试函数测试每个像素。 如果测试成功,则会将像素写入图面。 否则,Direct3D 将忽略像素。 选择具有 呈现状态D3DRS_ALPHAFUNC alpha 测试函数。 应用程序可以使用D3DRS_ALPHAREF呈现状态为所有像素设置要与之进行比较 引用 alpha 值。

alpha 测试的最常见用途是在光栅化几乎透明的对象时提高性能。 如果光栅化的颜色数据比给定像素 (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.

并非所有硬件都支持所有 alpha 测试功能。 可以通过调用 IDirect3D9::GetDeviceCaps 方法检查设备功能。 检索设备功能后,检查关联的 D3DCAPS9 结构的 AlphaCmpCaps 成员以获取所需的比较函数。 如果 AlphaCmpCaps 成员仅包含D3DPCMPCAPS_ALWAYS功能或仅包含D3DPCMPCAPS_NEVER功能,则驱动程序不支持 alpha 测试。

呈现状态