directx - 如何在具有翻转模式的 DirectX11 中消除锯齿?
问题描述
我了解建议使用翻转演示模式 ( DXGI_SWAP_EFFECT_FLIP_DISCARD
),但它似乎不支持多重采样。那么如何进行抗锯齿呢?
解决方案
现代的“翻转”模式(DXGI_SWAP_EFFECT_FLIP_DISCARD
和DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL
)强制执行一些新的使用规则。具体来说,您不能创建 MSAA 后备缓冲区或_SRGB
格式后备缓冲区。
现实情况是,当使用传统的“blt”样式模式 ( DXGI_SWAP_EFFECT_DISCARD
, DXGI_SWAP_EFFECT_SEQUENTIAL
) 时,您根本无法真正创建 MSAA 后备缓冲区。它只是隐式地创建了一个单样本后缓冲区和一个 MSAA 渲染目标,并“通过魔法”进行了解析。
在大多数“真实世界”渲染解决方案中,您 (a) 不只是进行解析,并且 (b) 不立即渲染 MSAA 渲染目标的已解析内容。后期处理、自定义抗锯齿和后期解析 UI 合成都发生在您呈现结果之前。因此,“魔术”解决方案仅对微不足道的样本有用。
请参阅此博客系列:现代交换链的维护和供给