RenderScript 数值类型

概览

标量:

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 来声明。例如,float4int3double2ulong4

如需创建矢量字面量,请使用矢量类型,后跟用大括号括起来的值,例如 (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.yzmyVar.gbmyVar.s12myVar.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_Matrix2x2rs_Matrix3x3rs_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 位有符号整数

API 级别 21 及更高级别中移除的类型定义符:long long

以下类型定义符:long 在 API 级别 21 中引入

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 矩阵

一个包含以下字段的结构:

float m[4]

一个 2x2 的正方形浮点数矩阵。条目存储在数组中的位置 [row*2 + col]。

请参阅矩阵函数

rs_Matrix3x3 :32 位浮点数的 3x3 矩阵

一个包含以下字段的结构:

float m[9]

一个 3x3 正方形浮点数矩阵。这些条目存储在数组中的位置 [row*3 + col]。

请参阅矩阵函数

rs_Matrix4x4 :32 位浮点数的 4x4 矩阵

一个包含以下字段的结构:

float m[16]

一个 4x4 正方形浮点数矩阵。条目存储在数组中的位置 [row*4 + col]。

请参阅矩阵函数

rs_quaternion :四元数

类型定义符:float4

表示四元数的 4x4 正方形浮点数矩阵。

请参阅四元数函数

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 位字段中。