我正在尝试使用标志D3D11_BUFFER_UAV_FLAG_COUNTER
位于像素着色器中的无人机缓冲区。对于发送到管道的每个像素,缓冲区将使用 增加计数器IncrementCounter()
,这在第一帧中效果很好。
但是,在第二帧中,计数器是在第一帧的基础上添加的。很明显,它稍后会溢出几帧。我曾尝试使用ClearUnorderedAccessViewUint()
函数(无用)或在计算着色器中执行以下操作:
[numthreads(1,1,1)]
void ResetCS()
{
while(FLBufferUAV.DecrementCounter());
}
然而,对于每一帧,计数器将加起来超过 10^6,它很慢。顺便问一下,有人用过 effect11Frame 吗?我有另一个问题。
answer:
我已经找到了重置计数器的方法。
的最后一个参数OMSetRenderTargetsAndUnorderedAccessViews()
用于初始化计数器值。
我没有发现这个问题,因为我使用 effect11Frame 来简化我的代码。
但是该OMSetRenderTargetsAndUnorderedAccessViews()
功能隐藏在 effect11Frame 中。我不知道是应该重写它还是直接丢弃 effect11Frame。