0

D3D10 Docs 上有一个列表,其中显示了从 D3D9 到 D3D10 的已弃用功能。它说不再支持 W 缓冲,我们应该改用高精度深度缓冲区/Z 缓冲区。我怀疑 Direct3D 11 和 12 也没有(完全)支持它。但是有没有办法在 Direct3D 12 中使用 W 缓冲区?

4

1 回答 1

1

Direct3D 9 中的“W 缓冲”功能是传统固定功能管道的一部分。在 Direct3D 10 及更高版本中,您只能使用可编程着色器管道(或对于 DirectX 11+,DirectCompute 着色器管道)。因此,“w-buffering”硬件特性不相关。当人们使用 16 位深度缓冲区时,这也是 Direct3D 9 时代硬件的更多问题。

在可编程着色器模型中,由您的着色器使用传统的 z 值或线性化深度值计算深度值,并设置适当的深度/模板状态。请注意,您需要使用SV_DepthGreaterSV_DepthLessEqual不要SV_Depth丢失“早期 z 拒绝”优化。

有关该主题的良好讨论,请参阅此博客文章这篇文章

TL;DR:大多数人只是使用DXGI_FORMAT_D32_FLOAT而不担心它。

于 2020-04-24T20:17:06.680 回答