RenderScript 数值类型

概览

标量

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 来声明向量。例如,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 的固定大小 float 方阵。类型名为 rs_matrix2x2rs_matrix3x3rs_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 位有符号整数

typedef 为:long long     从 API 级别 21 及更高版本中移除

typedef 为:long     在 API 级别 21 中添加

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

具有以下字段的结构体:     

float m[4]

一个 2x2 的 float 方阵。条目存储在数组位置 [行*2 + 列] 处。

请参阅矩阵函数

rs_matrix3x3 : 由 32 位 float 构成的 3x3 矩阵

具有以下字段的结构体:     

float m[9]

一个 3x3 的 float 方阵。条目存储在数组位置 [行*3 + 列] 处。

请参阅矩阵函数

rs_matrix4x4 : 由 32 位 float 构成的 4x4 矩阵

具有以下字段的结构体:     

float m[16]

一个 4x4 的 float 方阵。条目存储在数组位置 [行*4 + 列] 处。

请参阅矩阵函数

rs_quaternion : 四元数

typedef 为:float4     

一个代表四元数的 4x4 float 方阵。

请参阅四元数函数

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 位对齐。