如何使用CheckMultisampleQualityLevels并启用多重采样

时间:2011-03-16 05:13:59

标签: c++ directx antialiasing directx-11 multisampling

我正在学习directx 11并尝试设置多重采样。出于某种原因,互联网上的每个教程都禁用多重采样,并且永远不会讨论如何启用它。

首先:我一直在搜索,但找不到任何有关如何使用CheckMultisampleQualityLevels的示例。您似乎需要创建一个设备,调用该功能,找出可用的级别,然后销毁该设备并使用您想要的设置创建一个新设备。这是正确的方法吗?或者有更好的方法吗?

其次,如何启用多重采样?由于我不确定如何让CheckMultisampleQualityLevels正常工作,我尝试为DXGI_SWAP_CHAIN_DESC.SampleDesc.CountDXGI_SWAP_CHAIN_DESC.SampleDesc.Quality添加一些值(如4和4),当它运行时,不会显示任何内容(如果我输入像33和2这样的疯狂值,它会出错。这是否需要在交换链描述之外的其他位置设置,或者着色器是否以某种方式干扰它(我设置了基本的灯光和纹理着色器)?

我有GTX 570,所以我知道它可以支持大多数AA设置。我正在关注这套教程,以防有任何帮助:http://rastertek.com/tutindex.html

3 个答案:

答案 0 :(得分:5)

1.Call ID3D11Device::CheckMultisampleQualityLevels,它为您提供适配器支持的质量级别。

2.填写DXGI_SWAP_CHAIN_DESC时,设置SampleDesc.Count和SampleDesc.Quality。

3.如果使用多样本抗锯齿,则所有绑定渲染目标和深度缓冲区必须具有相同的样本计数和质量级别。 (DXGI_SAMPLE_DESC structure

根据有关D3D11_RASTERIZER_DESC(D3D11_RASTERIZER_DESC structure),API功能级别10.1及更高版本的msdn文档,MultisampleEnable对MSAA的点和三角形没有影响,只影响线渲染算法的选择。 / p>

您应该查看msdn以获取更多详细信息。

答案 1 :(得分:1)

您应该尝试设置MultisampleEnable D3D11_RASTERIZER_DESC

还将质量设置为1。

对于CheckmultisampleQuality,您只需设置要创建的DXGI格式。您想要的样本数量。最后传入指向uint的指针,它将返回可用的质量等级数。如果它返回0,则不支持多重采样,否则您知道可以设置的质量等级。

答案 2 :(得分:1)

这对我有所帮助:

  • 深度缓冲区必须具有相同的样本计数和质量水平
  • depthStencilViewDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DMS;

感谢@Telanor和@ user1253930