ZHCUAU3J January 2018 – March 2024
您可以使用字面量或标量变量,指定用于向量初始化或分配的值。如果分配给向量的所有值均是常数,得到的结果就是向量字面量。否则向量的值在运行时确定。在初始化每个元素不具有相同初始值的向量时,应使用构造函数初始化 idiom,如下例所示。
例如,在以下声明中分配给 vec_a 和 vec_b 的值是向量字面量,并且在编译时已知:
short4 vec_a = short4(1, 2, 3, 4);
float2 vec_b = float2(3.2, -2.3);
以下语句会将向量的所有元素初始化为相同的值。在这种情况下,可以是“constructor”习语或“cast/scalar-widening”习语。
ushort4 myushort4a = ushort4(1); // constructor syntax (preferred)
ushort4 myushort4b = (ushort4)1; // cast/scalar-widening syntax
较短的向量可以串联到一起,组成较长的向量。在以下示例中,两个 int 变量串联为一个 int2 变量。在以下函数中 myvec 的值直到运行时才进行解析:
void foo(int a, int b)
{
int2 myvec = int2(a, b);
...
}
在以下示例中,两个 int2 变量串联为一个 int4 变量,并传递到外部函数:
extern void bar(int4 v4);
void foo(int a, int b)
{
int2 myv2_a = int2(a, 1);
int2 myv2_b = int2(b, 2);
int4 myv4 = int4(myv2_a, myv2_b);
bar(myv4);
}