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