2

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;
}

但是当我构建使用它的内核函数时,它会发生错误。有任何想法吗?

4

1 回答 1

4

Metal 着色语言基于 C++ 11,但有一些特定的扩展和限制。限制之一是不允许递归函数调用,所以简短的回答是否定的,你不能这样做。

我不会粘贴完整的差异列表,因为我不知道改变它的可能性有多大,但它们在 Apple 的 Metal Shading Language Guide 的“Metal and C++ 11”部分中有所介绍。

于 2015-01-27T20:45:26.310 回答