在D3D11中, 通常通过设置交换链和深度模版缓冲中的DXGI_SAMPLE_DESC, 来启动硬件反锯齿功能.
typedef struct DXGI_SAMPLE_DESC
{ UINT Count;
UINT Quality; }
DXGI_SAMPLE_DESC, *LPDXGI_SAMPLE_DESC;
上述结构体有2个参数, Count指定每个像素sample的数目, 最大为16, quality用做指定aa的质量, 这个是和硬件厂商有关的, 通常情况下, 如果Count和Quality数目一样时候, 硬件会调用msaa反锯齿功能, 而Count小, 而Quality大时, 比如Count=4, 而Quality=8, 一般情况下对于amd显卡会调用eqaa硬件反锯齿, nv的显卡会调用csaa硬件反锯齿. 示例代码如下:
DXGI_SWAP_CHAIN_DESC sd; //首先声明一个DXGI_SWAP_CHAIN_DESC的对象sd ZeroMemory(&sd, sizeof(sd)); //用ZeroMemory对sd进行初始化 sd.BufferCount = 1; //交换链中后台缓存数量,通常为1 sd.BufferDesc.Width = width; //缓存区中的窗口宽 sd.BufferDesc.Height = height; //缓存区中的窗口高 sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; //指定32位像素格式,表示红绿蓝Alpha各8位,其他格式见书P50 sd.BufferDesc.RefreshRate.Numerator = 60; //刷新频率的分子为60 sd.BufferDesc.RefreshRate.Denominator = 1; //刷新频率的分母为1,即刷新频率为每秒6次 sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; //用来描述后台缓存的用法控制CPU对后台缓存的访问 sd.OutputWindow = hwnd; //指向渲染目标窗口的句柄 sd.SampleDesc.Count = 4; //多重采样的采样点数目 sd.SampleDesc.Quality = 8; //多重采样的采样点质量 sd.Windowed = TRUE; //TRUE为窗口模式,FALSE为全屏模式
如果有设置深度模板缓冲的话, 也要记得去改相应的属性. 效果还是挺明显的~

