D3D11中的抗锯齿设置

在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为全屏模式

如果有设置深度模板缓冲的话, 也要记得去改相应的属性. 效果还是挺明显的~

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注