构造矩阵对象
同矢量对象的构造相似, 矩阵对象也可以从标量或者矢量集合来构造, 当矩阵初始化时,其构造器参数决定了它是如何被创建的。 例如, 如果构造器参数仅仅是一个标量, 那么这个矩阵的对角线上的成员被初始化为这个标量,其他成员被初始化为0.0。
下面的这个调用
float4x4(fval);
构造的矩阵为:
fval 0.0 0.0 0.0
0.0 fval 0.0 0.0
0.0 0.0 fval 0.0
0.0 0.0 0.0 fval
矩阵也可以从另一个相同维数的矩阵来构建:
float3x4(float3x4);
float3x4(half3x4);
这种构造方式,矩阵的成员是以列为顺序来初始化的, 参数矩阵的维数必须与目标矩阵相同, 否则(过多或者过少)都会引发编译错误。
一个nxm的矩阵可以从n个m维的矢量来构造,例如:
float2x2(float2, float2);
float3x3(float3, float3, float3);
float3x2(float2, float2, float2);
矩阵不能从多个标量或者标量与矢量的组合来构造, 下面是一些非法的构造:
// both cases below are not supported
float2x2(float a00, float a01, float a10, float a11);
float2x3(float2 a, float b, float2 c, float d);
原子数据类型(Atomic Data Type)
原子类型只能在原子函数(Atomic Function)中使用, 关于原子函数会在下文讲述。 Metal 着色语言的原子函数就是C++11中的原子与同步函数的子集。 原子函数必须操作原子数据。
Metal 着色语言的原子类型有: atomic_int 和 atomic_uint。
译自:
https://developer.apple.com/library/ios/documentation/Metal/Reference/MetalShadingLanguageGuide/data-types/data-types.html#//apple_ref/doc/uid/TP40014364-CH2-SW1