GLSL - 论证中的`out`

时间:2016-09-01 08:46:32

标签: macos glsl metal

我现在正在学习GLSLCG并遇到此代码:

float trace( vec3 origin, vec3 direction, out vec3 p ) //<-- What is "out"?
{
    float totalDistanceTraveled = 0.0;
    for( int i=0; i <64; ++i)
    {
        p = origin + direction * totalDistanceTraveled;
float distanceFromPointOnRayToClosestObjectInScene = map( p );
        totalDistanceTraveled += distanceFromPointOnRayToClosestObjectInScene;

        if( distanceFromPointOnRayToClosestObjectInScene < 0.0001 )
        {
            break;
        }

if( totalDistanceTraveled > 10000.0 )
        {
            totalDistanceTraveled = 0.0000;
            break;
        }
    }

    return totalDistanceTraveled;
}

我正在将这些代码转换为shaders.metal,以便我可以使用Xcode。但我不确定out是什么以及如何更改它以便我可以在Metal中的着色器中使用此功能。

1 个答案:

答案 0 :(得分:2)

out限定符表示该值将由函数写入。它类似于(但不完全像)传递引用。 Metal中最接近的等价物是thread地址空间中的引用。 Metal Shading Language中的等效函数声明如下所示:

static float trace(float3 origin, float3 direction, thread float3 &p);