金属中的递归 ios
Recursion in Metal ios
Metal着色语言支持递归吗?
我有代码:
Intersection traceScene(Ray ray, int step) {
Intersection retIntersection = Intersection();
Intersection i1 = trianglePrism.intersect(ray);
Intersection i2 = image.intersect(ray);
if (i1.intersect) {
Ray newRay = Ray(i1.position, Refract(ray.direction, trianglePrism.normal, 0.71));
return traceScene(newRay, step + 1);
} else {
if (i2.intersect) {
return i2;
} else {
return Intersection();
}
}
return retIntersection;
}
但是当我构建使用它的内核函数时,它发生错误。有什么想法吗?
Metal 着色语言基于 C++ 11,但有一些特定的扩展和限制。限制之一是不允许递归函数调用,所以简短的回答是否定的,你不能这样做。
我不会粘贴完整的差异列表,因为我不知道更改它的可能性有多大,但它们在 Apple 的金属着色语言指南的 'Metal and C++ 11' 部分中有所介绍。
Metal着色语言支持递归吗? 我有代码:
Intersection traceScene(Ray ray, int step) {
Intersection retIntersection = Intersection();
Intersection i1 = trianglePrism.intersect(ray);
Intersection i2 = image.intersect(ray);
if (i1.intersect) {
Ray newRay = Ray(i1.position, Refract(ray.direction, trianglePrism.normal, 0.71));
return traceScene(newRay, step + 1);
} else {
if (i2.intersect) {
return i2;
} else {
return Intersection();
}
}
return retIntersection;
}
但是当我构建使用它的内核函数时,它发生错误。有什么想法吗?
Metal 着色语言基于 C++ 11,但有一些特定的扩展和限制。限制之一是不允许递归函数调用,所以简短的回答是否定的,你不能这样做。
我不会粘贴完整的差异列表,因为我不知道更改它的可能性有多大,但它们在 Apple 的金属着色语言指南的 'Metal and C++ 11' 部分中有所介绍。