在计算着色器(使用Unity)中,我有一个光线投影查找与网格三角形的交叉点。在某些时候,我想返回找到多少个交叉点。
我可以通过标记像素清楚地看到有多少个交叉点,但是如果我只是为计算着色器中的每个交叉点增加一个全局int(并通过缓冲区返回),那么我得到的数字就没有意义了。我认为这是因为我创造了竞争条件。
我看到opengl有"原子计数器" :https://www.opengl.org/wiki/Atomic_Counter,这似乎就是我在这种情况下所需要的。我没有在Unity和DirectCompute文档中找到这样的功能。有没有办法做到这一点?
我可以创建一个appendBuffer,但它看起来很傻,因为我确实需要返回一个int。
答案 0 :(得分:6)
HA!那很简单。我会把这个留在这里,以防万一有人遇到同样的问题。 HLSL有一整套"互锁"阻止此类事件发生的函数:
https://msdn.microsoft.com/en-us/library/windows/desktop/ff476334(v=vs.85).aspx
就我而言:
InterlockedAdd(collisionCount, 1);
替换
collisionCount++;
那就是它!