如何重置标志为D3D11_BUFFER_UAV_FLAG_COUNTER的缓冲区

时间:2013-07-19 05:29:33

标签: directx hlsl directx-11

我正在尝试在像素着色器中使用标志为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。

0 个答案:

没有答案