OSX - 将 GLSL 'InOut' 转换为 Metal

OSX - Convert GLSL 'InOut' to Metal

我正在尝试转换下面的 GLSL 函数:

float pMod1(inout float p, float size) {
    float halfsize = size*0.5;
    float c = floor((p + halfsize)/size);
    p = mod(p + halfsize, size) - halfsize;
    return c;
}

用于 Metal

static float pMod1( thread float &p, float size) {
    float halfsize = size*0.5;
    float c = floor((p + halfsize)/size);
    p = mod(p + halfsize, size) - halfsize;
    return c;
}

然后使用它:

static float map( float3 p )
{
    p.x = pMod1(p.x,10);
    ...
}

我得到一个错误:

Non-cont reference cannot bind to vector element

  1. 如何解决这个问题?
  2. MetalInOut 的等效限定词是什么?

我找到了解决方案:

首先你必须定义它:

#define _inout(T) T

然后在你的函数中使用它:

static float somefunction( _inout(float) p)