在一个计算着色器(使用Unity)中,我有一个光线投射来寻找与网格三角形的交点。在某种程度上,我想返回找到了多少个交叉点。
我可以通过标记像素清楚地看到有多少个交叉点,但是如果我简单地为计算着色器中的每个交叉点增加一个全局int (并通过缓冲区返回),我得到的数字就没有意义了。我认为这是因为我创建了一个竞态条件。
我看到opengl有“原子计数器”:https://www.opengl.org/wiki/Atomic_Counter,这似乎就是我在这种情况下需要的。我在Unity和DirectCompute文档中都没有找到这样的功能。有什么好方法可以做到这一点吗?
我可以创建一个appendBuffer,但这看起来很愚蠢,因为我只需要返回一个int。
发布于 2015-02-21 06:09:27
哈!这很简单。我把这个留在这里,以防有人遇到同样的问题。HLSL有一整套“互锁”函数来防止这类事情的发生:
https://msdn.microsoft.com/en-us/library/windows/desktop/ff476334(v=vs.85).aspx
在我的例子中是:
InterlockedAdd(collisionCount, 1);替换
collisionCount++;就是这样!
https://stackoverflow.com/questions/28638762
复制相似问题