C++ 将float3[]从GLSL转换为金属

C++ 将float3[]从GLSL转换为金属,c++,glsl,metal,C++,Glsl,Metal,如何将其转换为: const float3 GDFVectors[19] = float3[]( normalize(float3(1, 0, 0)), normalize(float3(0, 1, 0)), normalize(float3(0, 0, 1)),

如何将其转换为:

const float3 GDFVectors[19] = float3[](
                                   normalize(float3(1, 0, 0)),
                                   normalize(float3(0, 1, 0)),
                                   normalize(float3(0, 0, 1)),

                                   normalize(float3(1, 1, 1 )),
                                   normalize(float3(-1, 1, 1)),
                                   normalize(float3(1, -1, 1)),
                                   normalize(float3(1, 1, -1)),

                                   normalize(float3(0, 1, PHI+1)),
                                   normalize(float3(0, -1, PHI+1)),
                                   normalize(float3(PHI+1, 0, 1)),
                                   normalize(float3(-PHI-1, 0, 1)),
                                   normalize(float3(1, PHI+1, 0)),
                                   normalize(float3(-1, PHI+1, 0)),

                                   normalize(float3(0, PHI, 1)),
                                   normalize(float3(0, -PHI, 1)),
                                   normalize(float3(1, 0, PHI)),
                                   normalize(float3(-1, 0, PHI)),
                                   normalize(float3(PHI, 1, 0)),
                                   normalize(float3(-PHI, 1, 0))
                                   );
进入
金属
(或C++)?使用上面的代码,我得到了一些错误:

全局变量必须具有常量地址空间限定符


在Metal中,除了将数组限定为
const
之外,还需要将其限定为
常量
地址空间中的数组。我会这样写:

constant const float3 GDFVectors[] = {
    normalize(float3(1, 0, 0)),
    // ...
    normalize(float3(-PHI, 1, 0))
};

哇,这个
金属
真的让我很谦虚。为什么使用
{…}
而不是
[…]
?这不是一个
数组吗?
?我在C++/Metal中只使用大括号进行聚合初始化。我不认识你在问题中使用的语法。