【问题标题】:DirectCompute atomic counterDirectCompute 原子计数器
【发布时间】:2015-04-22 17:01:34
【问题描述】:

在计算着色器(使用 Unity)中,我有一个光线投射,可以找到与网格三角形的交点。在某个时候,我想返回找到了多少个交叉点。

我可以通过标记像素清楚地看到有多少交叉点,但是如果我只是为计算着色器中的每个交叉点增加一个全局 int (并通过缓冲区返回),那么我得到的数字毫无意义。我认为这是因为我正在创建一个竞争条件。

我看到 opengl 有“原子计数器”:https://www.opengl.org/wiki/Atomic_Counter,这似乎是我在这种情况下所需要的。我在 Unity 和 DirectCompute 文档中都没有找到这样的功能。有什么好办法吗?

我可以创建一个 appendBuffer,但这似乎很愚蠢,因为我实际上只需要返回一个 int。

【问题讨论】:

    标签: unity3d compute-shader directcompute


    【解决方案1】:

    哈!那很简单。我会把这个留在这里,以防有人遇到同样的问题。 HLSL 有一整套“联锁”功能,可防止此类事情发生:

    https://msdn.microsoft.com/en-us/library/windows/desktop/ff476334(v=vs.85).aspx

    在我的情况下是:

    InterlockedAdd(collisionCount, 1);
    

    替换

    collisionCount++;
    

    就是这样!

    【讨论】:

      猜你喜欢
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 2010-12-08
      • 2019-11-03
      • 2015-09-24
      相关资源
      最近更新 更多