对特定绘制调用应用多重采样/消除锯齿,而不是全部

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()

以上是关于对特定绘制调用应用多重采样/消除锯齿,而不是全部的主要内容,如果未能解决你的问题,请参考以下文章

◮OpenGL-抗锯齿

在 GLFW 窗口中启用多重采样不会提高抗锯齿的质量

GDI+ Graphics Obj - 使用 GDI 直接绘制到 DC 时消除锯齿丢失

OpenGL4 多重采样抗锯齿和渲染到纹理

WebGPU学习:MSAA

多重采样背景不显示