2017-04-26 53 views
0

我有一个struct在我metal文件:金属着色语言 - 结构不提供标运算符

struct Vects 
{ 
    float3 position[100]; 
}; 

将被用来存放缓冲数据:

kernel void compute(texture2d<float, access::write> output [[texture(0)]], 
        constant float &time [[buffer(0)]], 
        constant mouseInput &mouse [[buffer(1)]], 
        constant Vects &vects [[buffer(2)]],//<--- Vects 
        uint2 gid [[thread_position_in_grid]]) { 
... 
sceneSDF(origin, vects); 
... 
} 

float sceneSDF(float3 cotu,Vects vects) { 

    float a; 

    for(int i = 1; i < 3 ; i++){ 

     float3 u = vects[i-1].position;//<-- error! 
     float3 v = vects[i].position;//<-- error! 
     a = min(fSphere(cotu + u,0.7),fSphere(cotu + v,0.7)); 

    } 
    return a; 
} 

我在float3 u和出错了那

类型 'Vects' 不提供标运算符

我怎样才能解决这个问题?

+0

@CaptainObvlious事故。带走。 – sooon

回答

1

我认为你得到了你的订单,点符号和数组下标混淆在你的情况。这些行:

float3 u = vects[i-1].position; 
float3 v = vects[i].position; 

应该是:

float3 u = vects.position[i-1]; 
float3 v = vects.position[i]; 
0

你需要这样写:

float3 u = vects[i-1].position[i-1];//<-- error! 
float3 v = vects[i].position;//<-- error! 

因为vects不是数组,所以你不能用它那way.The u的类型,v是float3,与vects.position相同[position] [i]