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 来声明。例如,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 位有符号整数

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