将 float3[] 从 GLSL 转换为 Metal
Converting float3[] from GLSL to Metal
如何转换:
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))
);
到 Metal
(或 C++)?使用上面的代码我得到了一些错误:
Global variable must have a constant address space qualifier.
在 Metal 中,除了将数组限定为 const
之外,还需要将数组限定为位于 constant
地址 space 中。我会这样写:
constant const float3 GDFVectors[] = {
normalize(float3(1, 0, 0)),
// ...
normalize(float3(-PHI, 1, 0))
};
如何转换:
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))
);
到 Metal
(或 C++)?使用上面的代码我得到了一些错误:
Global variable must have a constant address space qualifier.
在 Metal 中,除了将数组限定为 const
之外,还需要将数组限定为位于 constant
地址 space 中。我会这样写:
constant const float3 GDFVectors[] = {
normalize(float3(1, 0, 0)),
// ...
normalize(float3(-PHI, 1, 0))
};