Metal 着色语言编程指南 六

下面所描述的对矢量成员的访问是非法的, 会引起编译错误:

     访问越界的矢量成员,  一个二维矢量只能访问 .xy 或者 .rg 成员,  三维矢量只能访问 .xyz 或者 rgb 成员:
float2 pos;
pos.x = 1.0f; // is legal; so is y
pos.z = 1.0f; // is illegal; so is w
 
float3 pos;
pos.z = 1.0f; // is legal
pos.w = 1.0f; // is illegal
    
  矢量成员为左值(lvalue)是, 不能同时使用两个重复的成员:
// illegal - 'x' used twice
pos.xx = float2(3.0f, 4.0f);
 
// illegal - mismatch between float2 and float4
pos.xy = float4(1.0f, 2.0f, 3.0f, 4.0f);

  .xyzw 和 .rgba 分别是以坐标或者颜色来表示矢量成员,  两种方式不能混合使用:
float4 pos = float4(1.0f, 2.0f, 3.0f, 4.0f);

pos.x = 1.0f;    // OK
pos.g = 2.0f;    // OK
pos.xg = float2(3.0f, 4.0f); // illegal - mixed qualifiers used
float3 coord = pos.ryz;  // illegal - mixed qualifiers used

 .xyzw 和 .rgba 矢量成员访问方式不能用于指针或者引用:
float4 pos = float4(1.0f, 2.0f, 3.0f, 4.0f);
my_func(&pos.xy);    // illegal

sizeof 操作符作用在一个矢量的时候, 其返回值为矢量的维数乘以其单个成员的大小, 举例来说:  sizeof(float4) = 16,  sizeof(half4) = 8.






你可能感兴趣的:(ios,metal)