在D3D10文档上是一个list,其中显示了从D3D9到D3D10不推荐使用的功能。它说不再支持W缓冲,而应该使用高精度深度缓冲区/ Z缓冲区。我怀疑Direct3D 11和12也不能(完全)支持它。但是,有什么方法可以在Direct3D 12中使用W缓冲区吗?
答案 0 :(得分:1)
Direct3D 9中的“ W缓冲”功能是旧版固定功能管道的一部分。在Direct3D 10和更高版本中,您只能使用可编程着色器管道(或对于DirectX 11+ DirectCompute着色器管道)。因此,“ w-buffering”硬件功能不相关。当人们使用16位深度缓冲区时,Direct3D 9时代的硬件也存在很多问题。
在可编程着色器模型中,取决于您的着色器是使用常规z值还是线性化深度值来计算深度值,并设置适当的深度/模板状态。请注意,您需要使用SV_DepthGreater
或SV_DepthLessEqual
而不是SV_Depth
才能避免丢失“早期z拒绝”优化。
有关该主题的详细讨论,请参见this blog post和this post。
TL; DR:大多数人只使用DXGI_FORMAT_D32_FLOAT
而不必担心。