概览
标量:
RenderScript 支持以下标量数值类型:
8 位 | 16 位 | 32 位 | 64 位 | |
整数: | 字符、int8_t | 简短、int16_t | int32_t | long、long long、int64_t |
无符号整数: | uchar、uint8_t | ushort、uint16_t | uint、uint32_t | ulong、uint64_t |
浮点数: | 半场 | 浮点数 | double |
矢量:
RenderScript 支持长度为 2、3 和 4 的固定大小的矢量。矢量使用通用类型名称后跟 2、3 或 4 来声明。例如,float4、int3、double2、ulong4。
如需创建矢量字面量,请使用矢量类型,后跟用大括号括起来的值,例如 (float3){1.0f, 2.0f, 3.0f}
。
可以使用不同的命名样式访问矢量的条目。
可以在变量名称后面加点“和”来访问单个条目:
- 即 x、y、z 和 w,
- 字母 r、g、b 和 a
- 字母 s 或 S,后跟从零开始的索引。
例如,使用 int4 myVar;
时,以下代码是等效的:
myVar.x == myVar.r == myVar.s0 == myVar.S0
myVar.y == myVar.g == myVar.s1 == myVar.S1
myVar.z == myVar.b == myVar.s2 == myVar.S2
myVar.w == myVar.a == myVar.s3 == myVar.S3
使用由多个字母或索引串联而成的标识符,可以一次访问矢量的多个条目。生成的向量的大小等于指定的条目数。
在上面的示例中,可以使用 myVar.yz
、myVar.gb
、myVar.s12
和 myVar.S12
访问中间两个条目。
这些条目不必是连续的,也不必按升序排列。只要我们不尝试向其分配条目,条目即可重复。您也不能混用不同的命名样式。
下面列举了一些示例来说明可以或不可以的行为:
float4 v4;
float3 v3;
float2 v2;
v2 = v4.xx; // Valid
v3 = v4.zxw; // Valid
v3 = v4.bba; // Valid
v3 = v4.s032; // Valid
v3.s120 = v4.S233; // Valid
v4.yz = v3.rg; // Valid
v4.yzx = v3.rg; // Invalid: mismatched sizes
v4.yzz = v3; // Invalid: z appears twice in an assignment
v3 = v3.xas0; // Invalid: can't mix xyzw with rgba nor s0...
v3 = v4.s034; // Invalid: the digit can only be 0, 1, 2, or 3
矩阵和四元数:
RenderScript 支持尺寸为 2x2、3x3 和 4x4 的固定大小的浮点数矩阵。 类型分别名为 rs_Matrix2x2、rs_Matrix3x3 和 rs_Matrix4x4。如需查看操作列表,请参阅矩阵函数。
也可以通过 rs_quaternion 支持四元数。有关操作列表,请参阅 Quaterion 函数。
总结
类型 | |
---|---|
字符 2 | 两个 8 位有符号整数 |
字符 3 | 三个 8 位有符号整数 |
字符 4 | 4 个 8 位有符号整数 |
double2 | 两个 64 位浮点数 |
double3 | 三个 64 位浮点数 |
double4 | 四个 64 位浮点数 |
float2 | 两个 32 位浮点 |
float3 | 三个 32 位浮点数 |
float4 | 四个 32 位浮点数 |
半 | 16 位浮点值 |
half2 | 两个 16 位浮点数 |
half3 | 三个 16 位浮点数 |
half4 | 四个 16 位浮点数 |
int16_t | 16 位有符号整数 |
int2 | 两个 32 位有符号整数 |
int3 | 三个 32 位有符号整数 |
int32_t | 32 位有符号整数 |
int4 | 4 个 32 位有符号整数 |
int64_t | 64 位有符号整数 |
int8_t | 8 位有符号整数 |
long2 | 两个 64 位有符号整数 |
long3 | 三个 64 位有符号整数 |
long4 | 4 个 64 位有符号整数 |
rs_Matrix2x2 | 32 位浮点数的 2x2 矩阵 |
rs_Matrix3x3 | 32 位浮点数的 3x3 矩阵 |
rs_Matrix4x4 | 32 位浮点数的 4x4 矩阵 |
rs_quaternion | 四元数 |
short2 | 两个 16 位有符号整数 |
short3 | 三个 16 位有符号整数 |
short4 | 4 个 16 位有符号整数 |
size_t [尺码 t] | 无符号大小类型 |
ssize_t | 签名大小类型 |
uchar | 8 位无符号整数 |
uchar2 | 两个 8 位无符号整数 |
uchar3 | 三个 8 位无符号整数 |
uchar4 | 4 个 8 位无符号整数 |
uint | 32 位无符号整数 |
uint16_t | 16 位无符号整数 |
uint2 | 两个 32 位无符号整数 |
uint3 | 三个 32 位无符号整数 |
uint32_t | 32 位无符号整数 |
uint4 | 4 个 32 位无符号整数 |
uint64_t | 64 位无符号整数 |
uint8_t | 8 位无符号整数 |
ulong | 64 位无符号整数 |
ulong2 | 两个 64 位无符号整数 |
ulong3 | 三个 64 位无符号整数 |
ulong4 | 4 个 64 位无符号整数 |
ushort | 16 位无符号整数 |
ushort2 | 两个 16 位无符号整数 |
ushort3 | 三个 16 位无符号整数 |
ushort4 | 4 个 16 位无符号整数 |
类型
char2 :两个 8 位有符号整数
以下类型定义符:char __attribute__((ext_vector_type(2)))
包含两个字符的矢量。这两个字符将打包到按 16 位对齐的单个 16 位字段中。
char3 :三个 8 位有符号整数
以下类型定义符:char __attribute__((ext_vector_type(3)))
包含三个字符的矢量。这三个字符将打包到按 32 位对齐的单个 32 位字段中。
char4 :四个 8 位有符号整数
以下类型定义符:char __attribute__((ext_vector_type(4)))
包含四个字符的矢量。这四个字符将打包到一个采用 32 位对齐的 32 位字段中。
double2 :两个 64 位浮点数
以下类型定义符:double __attribute__((ext_vector_type(2)))
两个双精度浮点数的矢量。这两个双字段打包到一个 128 位字段中,且对齐方式为 128 位。
double3 :三个 64 位浮点数
以下类型定义符:double __attribute__((ext_vector_type(3)))
三个双精度浮点数的矢量。这三个双字段按 256 位对齐打包到单个 256 位字段中。
double4 :四个 64 位浮点数
以下类型定义符:double __attribute__((ext_vector_type(4)))
四个双精度数的矢量。这四个双字段按 256 位对齐打包到单个 256 位字段中。
float2 :两个 32 位浮点数
以下类型定义符:float __attribute__((ext_vector_type(2)))
两个浮点数的矢量。这两个浮点数打包到一个 64 位字段中,并采用 64 位对齐。
两个浮点数的矢量。这两个浮点数打包到一个 64 位字段中,并采用 64 位对齐。
float3 :三个 32 位浮点数
以下类型定义符:float __attribute__((ext_vector_type(3)))
三个浮点数的矢量。这三个浮点数打包成一个采用 128 位对齐的 128 位字段。
float4 :4 个 32 位浮点数
以下类型定义符:float __attribute__((ext_vector_type(4)))
四个浮点类型的矢量。这四个浮点数被打包到一个采用 128 位对齐的 128 位字段中。
half :16 位浮点值
__fp16 的类型定义符:API 级别 23 中的新增配置
16 位浮点值。
half2 :两个 16 位浮点数
以下类型定义符:半 __attribute__((ext_vector_type(2))) 在 API 级别 23 中引入
半浮点类型的矢量版本。提供两个半字段,它们打包到一个采用 32 位对齐的 32 位字段中。
half3 :三个 16 位浮点数
以下类型定义符:半 __attribute__((ext_vector_type(3))) 此项为 API 级别 23 中的新增配置
半浮点类型的矢量版本。提供三个半字段,每个字段按 64 位对齐打包到单个 64 位字段中。
half4 :四个 16 位浮点数
半 __attribute__((ext_vector_type(4))) 的类型定义符:在 API 级别 23 中引入
半浮点类型的矢量版本。提供四个半字段,每个字段按 64 位对齐打包到单个 64 位字段中。
int16_t :16 位有符号整数
以下 Typedef:short
16 位有符号整数类型。
int2 :两个 32 位有符号整数
以下类型定义符:int __attribute__((ext_vector_type(2)))
两个整数的矢量。这两个整数将打包到采用 64 位对齐方式的单个 64 位字段中。
int3 :三个 32 位有符号整数
以下类型定义符:int __attribute__((ext_vector_type(3)))
三个整数的矢量。这三个整数将打包到一个采用 128 位对齐方式的 128 位字段中。
int32_t :32 位有符号整数
以下类型定义符:int
32 位有符号整数类型。
int4 :四个 32 位有符号整数
以下类型定义符:int __attribute__((ext_vector_type(4)))
四个整数的矢量。这两个 4 被打包到一个采用 128 位对齐的 128 位字段中。
int64_t :64 位有符号整数
int8_t :8 位有符号整数
以下 typedef: char
8 位有符号整数类型。
long2 :两个 64 位有符号整数
以下类型定义符:long __attribute__((ext_vector_type(2)))
两个长整型的矢量。这两个长整型将打包到一个采用 128 位对齐方式的 128 位字段中。
long3 :三个 64 位有符号整数
以下类型定义符:long __attribute__((ext_vector_type(3)))
三个长整型的矢量。这三个长整型将打包到一个采用 256 位对齐的 256 位字段中。
long4 :四个 64 位有符号整数
以下类型定义符:long __attribute__((ext_vector_type(4)))
包含四个长整型的矢量。这四个长整型被打包到一个采用 256 位对齐的 256 位字段中。
rs_Matrix2x2 :32 位浮点数的 2x2 矩阵
rs_Matrix3x3 :32 位浮点数的 3x3 矩阵
rs_Matrix4x4 :32 位浮点数的 4x4 矩阵
rs_quaternion :四元数
short2 :两个 16 位有符号整数
以下类型定义符:short __attribute__((ext_vector_type(2)))
两个 Shorts 短视频的矢量。这两个 Shorts 短视频将打包到一个采用 32 位对齐的 32 位字段中。
short3 :三个 16 位有符号整数
以下类型定义符:short __attribute__((ext_vector_type(3)))
三个 Shorts 短视频的矢量。这三个短字段按 64 位对齐打包到单个 64 位字段中。
short4 :4 个 16 位有符号整数
以下类型定义符:short __attribute__((ext_vector_type(4)))
四个 Shorts 短视频的矢量。这四个短字段按 64 位对齐打包到单个 64 位字段中。
size_t :无符号大小类型
以下类型定义符:uint64_t 针对 64 位进行编译时。
以下类型定义符:uint32_t 针对 32 位进行编译时。
无符号大小类型。位数取决于编译标志。
ssize_t :有符号的尺寸类型
以下类型定义符:int64_t 针对 64 位进行编译时。
以下类型定义符:int32_t 针对 32 位进行编译时。
有符号的大小类型。位数取决于编译标志。
uchar :8 位无符号整数
以下类型定义符:uint8_t
8 位无符号整数类型。
uchar2 :两个 8 位无符号整数
以下类型定义符:uchar __attribute__((ext_vector_type(2)))
两个 uchars 的矢量。这两个 uchar 字段按 16 位对齐打包到单个 16 位字段中。
uchar3 :三个 8 位无符号整数
以下类型定义符:uchar __attribute__((ext_vector_type(3)))
三个 uchars 的矢量。这三个 uchar 字段按 32 位对齐打包到单个 32 位字段中。
uchar4 :4 个 8 位无符号整数
以下类型定义符:uchar __attribute__((ext_vector_type(4)))
四个 uchars 的矢量。这四个 uchar 字段打包到一个采用 32 位对齐的 32 位字段中。
uint :32 位无符号整数
以下类型定义符:uint32_t
32 位无符号整数类型。
uint16_t :16 位无符号整数
以下 typedef:无符号短整型
16 位无符号整数类型。
uint2 :两个 32 位无符号整数
以下类型定义符:uint __attribute__((ext_vector_type(2)))
两个 uint 的矢量。这两个 uint 会打包到采用 64 位对齐的单个 64 位字段中。
uint3 :三个 32 位无符号整数
以下类型定义符:uint __attribute__((ext_vector_type(3)))
三个 uint 的矢量。这三个 uint 会打包到一个采用 128 位对齐方式的 128 位字段中。
uint32_t :32 位无符号整数
以下 typedef:unsigned int
32 位无符号整数类型。
uint4 :四个 32 位无符号整数
以下类型定义符:uint __attribute__((ext_vector_type(4)))
四个 uint 的矢量。这四个 uint 会打包到一个采用 128 位对齐的 128 位字段中。
uint64_t :64 位无符号整数
以下 typedef:unsigned long long 已从 API 级别 21 及更高级别中移除
以下类型定义符:unsigned long 在 API 级别 21 中引入
64 位无符号整数类型。
uint8_t :8 位无符号整数
以下类型定义符:unsigned char
8 位无符号整数类型。
ulong :64 位无符号整数
以下类型定义符:uint64_t
64 位无符号整数类型。
ulong2 :两个 64 位无符号整数
以下类型定义符:ulong __attribute__((ext_vector_type(2)))
两个乌隆的矢量。这两个 ulong 以 128 位对齐方式打包到单个 128 位字段中。
ulong3 :三个 64 位无符号整数
以下类型定义符:ulong __attribute__((ext_vector_type(3)))
三个乌隆的矢量。这三个 ulong 字段打包为采用 256 位对齐的单个 256 位字段。
ulong4 :四个 64 位无符号整数
以下类型定义符:ulong __attribute__((ext_vector_type(4)))
四个乌龙的矢量。这四个 ulong 字段打包为一个采用 256 位对齐的 256 位字段。
ushort :16 位无符号整数
以下类型定义符:uint16_t
16 位无符号整数类型。
ushort2 :两个 16 位无符号整数
以下类型定义符:ushort __attribute__((ext_vector_type(2)))
两个 ushort 的矢量。这两个 ushort 字段打包到一个采用 32 位对齐的 32 位字段中。
ushort3 :三个 16 位无符号整数
以下类型定义符:ushort __attribute__((ext_vector_type(3)))
三个 ushort 的矢量。这三个 ushort 字段按 64 位对齐打包到单个 64 位字段中。
ushort4 :4 个 16 位无符号整数
以下类型定义符:ushort __attribute__((ext_vector_type(4)))
四个 ushort 的矢量。这四个 ushort 字段按 64 位对齐打包到单个 64 位字段中。