Android NDK开发详解RenderScript之数值类型

Android NDK开发详解RenderScript之数值类型

概览

标量:
RenderScript 支持以下标量数值类型:

在这里插入图片描述

矢量:
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。如需查看运算列表,请参阅 Matrix 函数。

也可以通过 rs_quaternion 支持四元数。有关运算列表,请参阅四分位函数。

摘要

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类型

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 :四个 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 位有符号整数
以下类型定义符: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 及更高级别中移除的 typedef:long long

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

64 位有符号整数类型。

int8_t :8 位有符号整数
类型定义符: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 矩阵
一种结构,其中包含以下字段:

浮点数 m[4]

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

请参阅 Matrix 函数。

rs_matrix3x3 :32 位浮点数的 3x3 矩阵
一种结构,其中包含以下字段:

浮点数 m[9]

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

请参阅 Matrix 函数。

rs_matrix4x4 :32 位浮点数的 4x4 矩阵
一种结构,其中包含以下字段:

浮点数 m[16]

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

请参阅 Matrix 函数。

rs_quaternion :四元数
类型定义符:float4

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

请参阅四元数函数。

short2 :两个 16 位有符号整数
类型定义符:短 attribute((ext_vector_type(2)))

两个 Shorts 短视频的矢量。这两个 Shorts 短视频以 32 位对齐方式打包到一个 32 位字段中。

short3 :三个 16 位有符号整数
类型定义符:短 attribute((ext_vector_type(3)))

三个 Shorts 短视频的矢量。这三个短字段按 64 位对齐封装到单个 64 位字段中。

short4 :四个 16 位有符号整数
类型定义符:短 attribute((ext_vector_type(4)))

四个短视频的矢量。这四个短字段按 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)))

两个 uchar 的向量。这两个 uchar 字段按 16 位对齐打包到单个 16 位字段中。

uchar3 :三个 8 位无符号整数
类型定义符:uchar attribute((ext_vector_type(3)))

三个 uchars 的矢量。这三个 uchar 字段按 32 位对齐打包到单个 32 位字段中。

uchar4 :四个 8 位未签名整数
类型定义符:uchar attribute((ext_vector_type(4)))

四个 uchars 的矢量。这四个 uchar 字段打包到一个 32 位字段中,以 32 位对齐。

uint :32 位未签名整数
类型定义符:uint32_t

32 位无符号整数类型。

uint16_t :16 位无符号整数
以下类型定义:无符号短整数

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 位无符号整数
类型定义符:unsigned int

32 位无符号整数类型。

uint4 :四个 32 位未签名整数
类型定义符:uint attribute((ext_vector_type(4)))

四个 uint 的矢量。这四个 uint 以 128 位对齐打包到单个 128 位字段中。

uint64_t :64 位无符号整数
以下类型定义: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 :四个 16 位未签名整数
类型定义符:ushort attribute((ext_vector_type(4)))

四个 ushort 的矢量。这四个 ushort 字段打包成一个采用 64 位对齐的 64 位字段。

本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。

最后更新时间 (UTC):2023-10-18。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值