如果我想在Direct3D 11中清除整个深度/模板视图,我可以轻松拨打ID3D11DeviceContext::ClearDepthStencilView
。
Direct3D 11.1增加了使用ID3D11DeviceContext1::ClearView
清除渲染目标视图的矩形部分的支持。
但我认为没有办法只清除Direct3D 11中深度/模板视图的一部分,而不是在所需区域上渲染四边形?这看起来像是来自Direct3D 9的一个奇怪的回归,这很简单。我错过了什么,还是真的不支持?
答案 0 :(得分:1)
没有这样的功能只能清除深度/模板视图的一部分。 这是我解决问题的方法:
AlphaTest
,仅打开alpha为1的像素。AlphaBlend
,将BlendOP
设为Add
,将SrcBlend
系数设为0,将DestBlend
系数设为1。StencilTest
和DepthTest
设置为Always
,将StencilRef
设置为您要清除的值。答案 1 :(得分:-1)
有一个很好的理由去除API中的部分清除。首先,总是可以通过绘制具有适当渲染状态的四边形来模拟它们,其次,所有GPU都具有快速清除和解析硬件。在意图逻辑中使用它们可以大大提高渲染的性能。
使用DX11 clear API,可以使用快速清除和后者GPU优化。快速清除深度缓冲区也为早期深度测试做好准备(在像素着色之前,因为是,真正的深度测试是后像素着色),并且在访问深度缓冲区时将进行一些带宽优化。如果你用四边形清除,你就会失去所有这些,并且抽奖成本会上升。