如何使用翻转模式在 DirectX11 中消除锯齿?

How to anti-alias in DirectX11 with Flip mode?

我了解到建议使用翻转呈现模式(DXGI_SWAP_EFFECT_FLIP_DISCARD),但它似乎不支持多重采样。那么如何才能做到抗锯齿呢?

现代“翻转”模式(DXGI_SWAP_EFFECT_FLIP_DISCARDDXGI_SWAP_EFFECT_FLIP_SEQUENTIAL)实施了一些新的使用规则。具体来说,您不能创建 MSAA 后备缓冲区或 _SRGB 格式后备缓冲区。

实际情况是,当使用传统的“blt”样式模式(DXGI_SWAP_EFFECT_DISCARDDXGI_SWAP_EFFECT_SEQUENTIAL)时,您根本无法真正创建 MSAA 后备缓冲区。它只是隐式地创建了一个单样本后备缓冲区和一个 MSAA 渲染目标,并“神奇地”进行了解析。

在大多数 'real world' 渲染解决方案中,您 (a) 不只是进行解析,并且 (b) 不立即渲染 MSAA 渲染目标的已解析内容。 Post-处理、自定义抗锯齿和post-解析UI合成都发生在您呈现结果之前。因此,'magic' 解决方案仅适用于普通样本。

查看此博客系列:The Care and Feeding of Modern Swap Chains