对特定绘制调用应用多重采样/消除锯齿,而不是全部
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对特定绘制调用应用多重采样/消除锯齿,而不是全部相关的知识,希望对你有一定的参考价值。
我知道我可以通过设置例如4的样本计数来应用多次采样,并设置光栅化器阶段以对其应用多次采样。这很好用,但是现在我想只对我正在进行的绘制调用的一部分应用多次采样。我怎样才能做到这一点?
在伪代码中,这是我想要实现的:
> build vertices data for a simple triangle
> map and copy vertices data to device
> send draw call to device which does NOT apply anti aliasing
> build vertices data for a simple rectangle
> map and copy vertices data to device
> send draw call to device which applies multisampling/antialiasing
在此先感谢您的帮助!
答案
Direct3D 11中有一个名为D3D11_RASTERIZER_DESC.MultisampleEnable
的光栅化器状态。但值得注意的是,这仅禁用Direct3D功能级别9.x和10.0上的多重采样渲染。在Direct3D要素级别10.1或更高版本的硬件上,它无法更改渲染点或三角形的方式来渲染具有大于1的样本数的目标。相反,它将行算法与AntialiasedLineEnable
组合设置,您可以阅读在MSDN。
换句话说,如果要渲染到MSAA曲面,在大多数情况下,它将被多重采样。问题是:你真的想在这里完成什么?
另一答案
正如Chuck Walbourn所解释的那样,不可能将单次和多次采样渲染混合到同一渲染目标中。但是,可以将多重采样内容渲染到纹理并将其解析为单个采样内容。您可以将此纹理渲染到单个采样的渲染目标上。
将多采样资源解析为单采样资源的方法是ID3D11DeviceContext::ResolveSubresource()
。
以上是关于对特定绘制调用应用多重采样/消除锯齿,而不是全部的主要内容,如果未能解决你的问题,请参考以下文章