在D3D10上,Docs是一个列表,它显示了从D3D9到D3D10的不推荐特性。它说,W缓冲不再支持,我们应该使用高精度的深度缓冲区/Z-缓冲区。我怀疑在Direct3D 11和12中也没有(完全)支持它。但是在Direct3D 12中有什么方法可以使用W缓冲区吗?
发布于 2020-04-24 20:17:06
Direct3D 9中的“W缓冲”功能是传统固定功能管道的一部分。在Direct3D 10及更高版本中,您只能使用可编程着色器管道(或用于DirectX 11+ DirectCompute着色器管道)。因此,“w缓冲”硬件功能是不相关的。当人们使用16位深度缓冲时,这也是Direct3D 9时代硬件的一个更大的问题。
在可编程着色器模型中,由您的着色器使用常规z或线性化深度值计算深度值,并设置适当的深度/模板状态。请注意,您需要使用SV_DepthGreater
或SV_DepthLessEqual
而不是SV_Depth
来避免“早期z拒绝”优化。
有关该主题的良好讨论,请参见这篇博客文章和这个职位。
TL;DR:大多数人只使用DXGI_FORMAT_D32_FLOAT
,不用担心。
https://stackoverflow.com/questions/61407405
复制相似问题