Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Directx 如何重置标记为D3D11\u buffer\u UAV\u flag\u计数器的缓冲区_Directx_Hlsl_Directx 11 - Fatal编程技术网

Directx 如何重置标记为D3D11\u buffer\u UAV\u flag\u计数器的缓冲区

Directx 如何重置标记为D3D11\u buffer\u UAV\u flag\u计数器的缓冲区,directx,hlsl,directx-11,Directx,Hlsl,Directx 11,我试图使用一个无人机缓冲区,其标志是像素着色器中的D3D11\u buffer\u UAV\u flag\u COUNTER。对于发送到管道的每个像素,缓冲区将使用IncrementCounter()增加计数器,这在第一帧中效果良好 然而,在第二帧中,计数器是在第一帧的基础上添加的。很明显,它将在几帧之后溢出。 我曾尝试使用ClearUnorderedAccessViewUint()函数(无用)或在计算着色器中执行以下操作: [numthreads(1,1,1)] void ResetCS(

我试图使用一个无人机缓冲区,其标志是像素着色器中的D3D11\u buffer\u UAV\u flag\u COUNTER。对于发送到管道的每个像素,缓冲区将使用
IncrementCounter()
增加计数器,这在第一帧中效果良好

然而,在第二帧中,计数器是在第一帧的基础上添加的。很明显,它将在几帧之后溢出。 我曾尝试使用
ClearUnorderedAccessViewUint()
函数(无用)或在计算着色器中执行以下操作:

[numthreads(1,1,1)]  
void ResetCS()  
{  
    while(FLBufferUAV.DecrementCounter());  
}  
但是,对于每一帧,计数器的总和将超过10^6,这是缓慢的。 顺便问一下,有人用过effect11Frame吗?我还有一个问题


答案:
我已经找到重置计数器的方法。
OMSetRenderTargetsAndUnorderedAccessViews()的最后一个参数用于初始化计数器值。
我没有发现这个问题,因为我使用effect11Frame来简化代码。

但是,
OMSetRenderTargetsAndUnorderedAccessViews()
函数隐藏在effect11Frame中。我不知道是应该重写它还是放弃effect11Frame。

在我看来,这些信息很有用。也许你应该考虑加强你自己的编辑和回答,而不是把答案放在问题上。谢谢你的建议。这是我第一次问这个问题。如果你使用fx framework,你可以使用D3D11的“保持”、“渲染”、“目标”和“深度”模具选项调用OMSEtrenderTargetsandUnorderedAccessView,然后在计数器中使用0重新应用你的uav(你需要在ApplyPass之后执行)。另一个选择,因为您有effects11源代码,是在UAV变量类型中添加计数器支持(如果您愿意的话,可以随时使用)。谢谢。这是一个有效的方法!但是如果我使用fx框架,当我使用PIXWin调试模式时会出现一些问题。也许我的fx框架版本太低了。