2016-09-06 64 views
0

我嘗試轉換下GLSL功能:OSX - 轉換GLSL '的InOut' 以金屬

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. 什麼是InOutMetal的等效限定符?

回答

0

我找到了解決辦法:

首先你要定義它:

#define _inout(T) T 

然後在你的函數中使用它:

static float somefunction(_inout(float) p)