0

我正在尝试使用标志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。

4

0 回答 0