金属着色语言 - 结构不提供下标运算符
Metal Shading Language - struct does not provide a subscript operator
我的 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
和 float3 v
处遇到错误
Type 'Vects' does not provide a subscript operator
我该如何解决?
我认为您在您的案例中混淆了点符号和数组下标的顺序。这些行:
float3 u = vects[i-1].position;
float3 v = vects[i].position;
应该是:
float3 u = vects.position[i-1];
float3 v = vects.position[i];
你需要这样写:
float3 u = vects[i-1].position[i-1];//<-- error!
float3 v = vects[i].position;//<-- error!
因为vects不是数组,所以不能用way.The类型的u,v是float3,和vects.position[i]
一样
我的 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
和 float3 v
处遇到错误
Type 'Vects' does not provide a subscript operator
我该如何解决?
我认为您在您的案例中混淆了点符号和数组下标的顺序。这些行:
float3 u = vects[i-1].position;
float3 v = vects[i].position;
应该是:
float3 u = vects.position[i-1];
float3 v = vects.position[i];
你需要这样写:
float3 u = vects[i-1].position[i-1];//<-- error!
float3 v = vects[i].position;//<-- error!
因为vects不是数组,所以不能用way.The类型的u,v是float3,和vects.position[i]
一样