2017-04-26 11 views
0

を提供していない私は私のmetalファイル内struct持っている:バッファデータを保持するために使用されますメタルシェーディング言語 - 構造体は、添字演算子

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 accidentと同じです。取り出した。 – sooon

答えて

1

私はあなたのドット表記法と配列の添え字があなたのケースで混在していると思います。これらの行:

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

する必要があります:あなたはそれをそのway.Theを使用することはできませんのでvectsは、配列ではないので

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

:あなたはこのように書く必要がある

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

u、vの型はfloat3、vects.position [i]

関連する問題