概览
标量
RenderScript 支持以下标量数值类型
8 位 | 16 位 | 32 位 | 64 位 | |
整数 | char, int8_t | short, int16_t | int32_t | long, long long, int64_t |
无符号整数 | uchar, uint8_t | ushort, uint16_t | uint, uint32_t | ulong, uint64_t |
浮点 | half | float | 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 的固定大小 float 方阵。类型名为 rs_matrix2x2、rs_matrix3x3 和 rs_matrix4x4。有关运算列表,请参阅矩阵函数。
四元数也通过 rs_quaternion 受支持。有关运算列表,请参阅四元数函数。
总结
类型 | |
---|---|
char2 | 两个 8 位有符号整数 |
char3 | 三个 8 位有符号整数 |
char4 | 四个 8 位有符号整数 |
double2 | 两个 64 位 float |
double3 | 三个 64 位 float |
double4 | 四个 64 位 float |
float2 | 两个 32 位 float |
float3 | 三个 32 位 float |
float4 | 四个 32 位 float |
half | 16 位浮点值 |
half2 | 两个 16 位 float |
half3 | 三个 16 位 float |
half4 | 四个 16 位 float |
int16_t | 16 位有符号整数 |
int2 | 两个 32 位有符号整数 |
int3 | 三个 32 位有符号整数 |
int32_t | 32 位有符号整数 |
int4 | 四个 32 位有符号整数 |
int64_t | 64 位有符号整数 |
int8_t | 8 位有符号整数 |
long2 | 两个 64 位有符号整数 |
long3 | 三个 64 位有符号整数 |
long4 | 四个 64 位有符号整数 |
rs_matrix2x2 | 由 32 位 float 构成的 2x2 矩阵 |
rs_matrix3x3 | 由 32 位 float 构成的 3x3 矩阵 |
rs_matrix4x4 | 由 32 位 float 构成的 4x4 矩阵 |
rs_quaternion | 四元数 |
short2 | 两个 16 位有符号整数 |
short3 | 三个 16 位有符号整数 |
short4 | 四个 16 位有符号整数 |
size_t | 无符号大小类型 |
ssize_t | 有符号大小类型 |
uchar | 8 位无符号整数 |
uchar2 | 两个 8 位无符号整数 |
uchar3 | 三个 8 位无符号整数 |
uchar4 | 四个 8 位无符号整数 |
uint | 32 位无符号整数 |
uint16_t | 16 位无符号整数 |
uint2 | 两个 32 位无符号整数 |
uint3 | 三个 32 位无符号整数 |
uint32_t | 32 位无符号整数 |
uint4 | 四个 32 位无符号整数 |
uint64_t | 64 位无符号整数 |
uint8_t | 8 位无符号整数 |
ulong | 64 位无符号整数 |
ulong2 | 两个 64 位无符号整数 |
ulong3 | 三个 64 位无符号整数 |
ulong4 | 四个 64 位无符号整数 |
ushort | 16 位无符号整数 |
ushort2 | 两个 16 位无符号整数 |
ushort3 | 三个 16 位无符号整数 |
ushort4 | 四个 16 位无符号整数 |
类型
char2 : 两个 8 位有符号整数
typedef 为:char __attribute__((ext_vector_type(2)))
包含两个 char 的向量。这两个 char 被打包到一个 16 位字段中,具有 16 位对齐。
char3 : 三个 8 位有符号整数
typedef 为:char __attribute__((ext_vector_type(3)))
包含三个 char 的向量。这三个 char 被打包到一个 32 位字段中,具有 32 位对齐。
char4 : 四个 8 位有符号整数
typedef 为:char __attribute__((ext_vector_type(4)))
包含四个 char 的向量。这四个 char 被打包到一个 32 位字段中,具有 32 位对齐。
double2 : 两个 64 位 float
typedef 为:double __attribute__((ext_vector_type(2)))
包含两个 double 的向量。这两个 double 字段被打包到一个 128 位字段中,具有 128 位对齐。
double3 : 三个 64 位 float
typedef 为:double __attribute__((ext_vector_type(3)))
包含三个 double 的向量。这三个 double 字段被打包到一个 256 位字段中,具有 256 位对齐。
double4 : 四个 64 位 float
typedef 为:double __attribute__((ext_vector_type(4)))
包含四个 double 的向量。这四个 double 字段被打包到一个 256 位字段中,具有 256 位对齐。
float2 : 两个 32 位 float
typedef 为:float __attribute__((ext_vector_type(2)))
包含两个 float 的向量。这两个 float 被打包到一个 64 位字段中,具有 64 位对齐。
包含两个 float 的向量。这两个 float 被打包到一个 64 位字段中,具有 64 位对齐。
float3 : 三个 32 位 float
typedef 为:float __attribute__((ext_vector_type(3)))
包含三个 float 的向量。这三个 float 被打包到一个 128 位字段中,具有 128 位对齐。
float4 : 四个 32 位 float
typedef 为:float __attribute__((ext_vector_type(4)))
包含四个 float 类型的向量。这四个 float 被打包到一个 128 位字段中,具有 128 位对齐。
half : 16 位浮点值
typedef 为:__fp16 在 API 级别 23 中添加
一个 16 位浮点值。
half2 : 两个 16 位 float
typedef 为:half __attribute__((ext_vector_type(2))) 在 API 级别 23 中添加
half float 类型的向量版本。提供两个 half 字段,打包到一个 32 位字段中,具有 32 位对齐。
half3 : 三个 16 位 float
typedef 为:half __attribute__((ext_vector_type(3))) 在 API 级别 23 中添加
half float 类型的向量版本。提供三个 half 字段,打包到一个 64 位字段中,具有 64 位对齐。
half4 : 四个 16 位 float
typedef 为:half __attribute__((ext_vector_type(4))) 在 API 级别 23 中添加
half float 类型的向量版本。提供四个 half 字段,打包到一个 64 位字段中,具有 64 位对齐。
int16_t : 16 位有符号整数
typedef 为:short
一个 16 位有符号整数类型。
int2 : 两个 32 位有符号整数
typedef 为:int __attribute__((ext_vector_type(2)))
包含两个 int 的向量。这两个 int 被打包到一个 64 位字段中,具有 64 位对齐。
int3 : 三个 32 位有符号整数
typedef 为:int __attribute__((ext_vector_type(3)))
包含三个 int 的向量。这三个 int 被打包到一个 128 位字段中,具有 128 位对齐。
int32_t : 32 位有符号整数
typedef 为:int
一个 32 位有符号整数类型。
int4 : 四个 32 位有符号整数
typedef 为:int __attribute__((ext_vector_type(4)))
包含四个 int 的向量。这四个 int 被打包到一个 128 位字段中,具有 128 位对齐。
int64_t : 64 位有符号整数
int8_t : 8 位有符号整数
typedef 为:char
8 位有符号整数类型。
long2 : 两个 64 位有符号整数
typedef 为:long __attribute__((ext_vector_type(2)))
包含两个 long 的向量。这两个 long 被打包到一个 128 位字段中,具有 128 位对齐。
long3 : 三个 64 位有符号整数
typedef 为:long __attribute__((ext_vector_type(3)))
包含三个 long 的向量。这三个 long 被打包到一个 256 位字段中,具有 256 位对齐。
long4 : 四个 64 位有符号整数
typedef 为:long __attribute__((ext_vector_type(4)))
包含四个 long 的向量。这四个 long 被打包到一个 256 位字段中,具有 256 位对齐。
rs_matrix2x2 : 由 32 位 float 构成的 2x2 矩阵
rs_matrix3x3 : 由 32 位 float 构成的 3x3 矩阵
rs_matrix4x4 : 由 32 位 float 构成的 4x4 矩阵
rs_quaternion : 四元数
short2 : 两个 16 位有符号整数
typedef 为:short __attribute__((ext_vector_type(2)))
包含两个 short 的向量。这两个 short 被打包到一个 32 位字段中,具有 32 位对齐。
short3 : 三个 16 位有符号整数
typedef 为:short __attribute__((ext_vector_type(3)))
包含三个 short 的向量。这三个 short 字段被打包到一个 64 位字段中,具有 64 位对齐。
short4 : 四个 16 位有符号整数
typedef 为:short __attribute__((ext_vector_type(4)))
包含四个 short 的向量。这四个 short 字段被打包到一个 64 位字段中,具有 64 位对齐。
size_t : 无符号大小类型
typedef 为:uint64_t 针对 64 位编译时。
typedef 为:uint32_t 针对 32 位编译时。
无符号大小类型。位数取决于编译标志。
ssize_t : 有符号大小类型
typedef 为:int64_t 针对 64 位编译时。
typedef 为:int32_t 针对 32 位编译时。
有符号大小类型。位数取决于编译标志。
uchar : 8 位无符号整数
typedef 为:uint8_t
8 位无符号整数类型。
uchar2 : 两个 8 位无符号整数
typedef 为:uchar __attribute__((ext_vector_type(2)))
包含两个 uchar 的向量。这两个 uchar 字段被打包到一个 16 位字段中,具有 16 位对齐。
uchar3 : 三个 8 位无符号整数
typedef 为:uchar __attribute__((ext_vector_type(3)))
包含三个 uchar 的向量。这三个 uchar 字段被打包到一个 32 位字段中,具有 32 位对齐。
uchar4 : 四个 8 位无符号整数
typedef 为:uchar __attribute__((ext_vector_type(4)))
包含四个 uchar 的向量。这四个 uchar 字段被打包到一个 32 位字段中,具有 32 位对齐。
uint : 32 位无符号整数
typedef 为:uint32_t
一个 32 位无符号整数类型。
uint16_t : 16 位无符号整数
typedef 为:unsigned short
一个 16 位无符号整数类型。
uint2 : 两个 32 位无符号整数
typedef 为:uint __attribute__((ext_vector_type(2)))
包含两个 uint 的向量。这两个 uint 被打包到一个 64 位字段中,具有 64 位对齐。
uint3 : 三个 32 位无符号整数
typedef 为:uint __attribute__((ext_vector_type(3)))
包含三个 uint 的向量。这三个 uint 被打包到一个 128 位字段中,具有 128 位对齐。
uint32_t : 32 位无符号整数
typedef 为:unsigned int
一个 32 位无符号整数类型。
uint4 : 四个 32 位无符号整数
typedef 为:uint __attribute__((ext_vector_type(4)))
包含四个 uint 的向量。这四个 uint 被打包到一个 128 位字段中,具有 128 位对齐。
uint64_t : 64 位无符号整数
typedef 为:unsigned long long 从 API 级别 21 及更高版本中移除
typedef 为:unsigned long 在 API 级别 21 中添加
一个 64 位无符号整数类型。
uint8_t : 8 位无符号整数
typedef 为:unsigned char
8 位无符号整数类型。
ulong : 64 位无符号整数
typedef 为:uint64_t
一个 64 位无符号整数类型。
ulong2 : 两个 64 位无符号整数
typedef 为:ulong __attribute__((ext_vector_type(2)))
包含两个 ulong 的向量。这两个 ulong 被打包到一个 128 位字段中,具有 128 位对齐。
ulong3 : 三个 64 位无符号整数
typedef 为:ulong __attribute__((ext_vector_type(3)))
包含三个 ulong 的向量。这三个 ulong 字段被打包到一个 256 位字段中,具有 256 位对齐。
ulong4 : 四个 64 位无符号整数
typedef 为:ulong __attribute__((ext_vector_type(4)))
包含四个 ulong 的向量。这四个 ulong 字段被打包到一个 256 位字段中,具有 256 位对齐。
ushort : 16 位无符号整数
typedef 为:uint16_t
一个 16 位无符号整数类型。
ushort2 : 两个 16 位无符号整数
typedef 为:ushort __attribute__((ext_vector_type(2)))
包含两个 ushort 的向量。这两个 ushort 字段被打包到一个 32 位字段中,具有 32 位对齐。
ushort3 : 三个 16 位无符号整数
typedef 为:ushort __attribute__((ext_vector_type(3)))
包含三个 ushort 的向量。这三个 ushort 字段被打包到一个 64 位字段中,具有 64 位对齐。
ushort4 : 四个 16 位无符号整数
typedef 为:ushort __attribute__((ext_vector_type(4)))
包含四个 ushort 的向量。这四个 ushort 字段被打包到一个 64 位字段中,具有 64 位对齐。