操作符(Operators)
本章讲述Metal 着色语言的操作符, 第一部分讲述矢量和标量操作符, 所谓标量操作数, 就是指整型, 浮点型或者布尔型的变量. 所谓矢量操作书是指其成员为整型, 浮点型或者布尔型的 1-, 2-, 3-, 4- 维矢量. 第二部分讲述矩阵操作符, 矩阵操作符应用于至少有一个操作数为矩阵的场合, 另一个操作数可以为标量, 矢量或者矩阵.
矢量和标量操作符
Operators | Operand Types | Result Type |
---|---|---|
Basic arithmetic: unary unary | Integer or floating-point Scalar or vector | Same as operands |
Modulus arithmetic: | Integer only Scalar or vector | Same as operands |
Prefix or postfix increment or decrement: | Integer only Scalar or vector | Same as operand |
Relational: | Integer or floating-point Scalar or vector | Boolean Scalar or vector (matching operands) |
Equality: | Boolean, integer or floating-point Scalar or vector | Boolean Scalar or vector (matching operand) |
Bitwise: unary | Integer only Scalar or vector | Same as operands |
Logical: unary | Boolean only Scalar or vector | Boolean Scalar or vector (matching operand) |
Ternary selection: expr1 | expr1: Boolean scalar expr2 and expr3: Any type (must match) | Type of expr2 or expr3 |
Bit-shift: | Integer only Scalar or vector | Same as operands |
Assignment: lvalue | Boolean, integer, or floating-point Scalar or vector | Type of lvalue |
除了 = 操作符之外的其他二元操作符都可以应用于标量, 矢量或者这两者的组合, 当操作数类型不一致的时候, 会应用隐式类型转换规则将操作数类型转换成为相同类型. 这种类型转换适用于标量, 矢量,或者两者的组合.
下面讲述一些合法的操作符使用:
- 两个操作符都是标量, 其结果也为标量.
- 一个操作符为标量, 另一个操作符为矢量, 先会把标量的类型转换为矢量类型, 这个矢量类型的维数跟另一个矢量相同, 其所有成员的值都与被转换的标量相同. 操作符会逐个应用于这两个矢量相同位置的分量, 其结果为同维数的矢量.
- 两个操作数为同维数的矢量, 操作符就逐个应用于两个矢量相同位置的分量, 其结果为同维数的矢量.