2016-09-14 82 views
-1

如何转换此:转换FLOAT3 []从GLSL到金属

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++)?有了上面的代码,我得到了一些错误:

全局变量必须有一个固定的地址空间限定符。

回答

0

在金属,您需要将阵列资格作为在另外constant地址空间来限定它为const之中。我写这个为:

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

哇,这个'金属'真的让我很虚弱。为什么使用{...}'而不是'[...]'?这不是一个'数组'吗? – sooon

+0

我只用过大括号在C++/Metal中进行聚合初始化。我不认识你在问题中使用的语法。 – warrenm