概览
以下函数可用于查询 Allocation、Element 或 Sampler 对象的特性。这些对象是从 Java 创建的。您无法从脚本中创建它们。
Allocations(分配)
分配是用于向 RenderScript 内核传递数据以及从 RenderScript 内核接收数据的主要方法。
它们是单元格的结构化集合,可用于存储位图、纹理、任意数据点等。
此单元格集合可以具有许多维度(X、Y、Z、Array0、Array1、Array2、Array3)、面(用于立方体贴图)和细节级别(用于 mipmapping)。
有关如何创建分配的详细信息,请参阅 android.renderscript.Allocation。
Elements(元素)
在 RenderScript 中,“元素”这个术语有点含糊不清,既指 Allocation 单元格的类型信息,也指该类型的实例化。例如,
- rs_element 是类型规范的句柄,而
- 在 rsGetElementAt() 等函数中,“element”指类型的实例化,即 Allocation 的一个单元格。
以下函数允许您查询类型规范的特性。
元素可以指定 C 中找到的简单数据类型,例如整数、浮点数或布尔值。它还可以指定 RenderScript 对象的句柄。有关基本类型的列表,请参阅 rs_data_type。
元素可以指定基本类型的固定大小矢量版本(大小为 2、3 或 4)。元素可以组合成复杂元素,创建相当于 C 结构定义的内容。
元素还可以具有 kind,这是一种用于解释像素数据的语义信息。请参阅 rs_data_kind。
创建常见元素的 Allocation 时,您可以直接使用许多预定义元素之一,例如 F32_2。
要创建复杂元素,请使用 Element.Builder Java 类。
Samplers(采样器)
Sampler 对象定义了 Allocation 如何在内核中被读取为结构。请参阅 android.renderscript.S。
摘要
函数 | |
---|---|
rsAllocationGetDimFaces | 是否存在多个面 |
rsAllocationGetDimLOD | 是否存在细节级别 |
rsAllocationGetDimX | X 维度的大小 |
rsAllocationGetDimY | Y 维度的大小 |
rsAllocationGetDimZ | Z 维度的大小 |
rsAllocationGetElement | 获取描述 Allocation 单元格的对象 |
rsClearObject | 释放对象 |
rsElementGetBytesSize | Element 的大小 |
rsElementGetDataKind | Element 的 kind |
rsElementGetDataType | Element 的数据类型 |
rsElementGetSubElement | 复杂元素的子元素 |
rsElementGetSubElementArraySize | 复杂元素的子元素的数组大小 |
rsElementGetSubElementCount | 子元素的数量 |
rsElementGetSubElementName | 子元素的名称 |
rsElementGetSubElementNameLength | 子元素名称的长度 |
rsElementGetSubElementOffsetBytes | 实例化子元素的偏移量 |
rsElementGetVectorSize | Element 的矢量大小 |
rsIsObject | 检查空句柄 |
rsSamplerGetAnisotropy | Sampler 的各向异性值 |
rsSamplerGetMagnification | Sampler 放大值 |
rsSamplerGetMinification | Sampler 缩小值 |
rsSamplerGetWrapS | Sampler S 环绕值 |
rsSamplerGetWrapT | Sampler T 环绕值 |
已弃用函数 | |
---|---|
rsGetAllocation | 已弃用。返回给定指针的 Allocation |
函数
rsAllocationGetDimFaces : 是否存在多个面
uint32_t rsAllocationGetDimFaces(rs_allocation a); |
返回值
如果存在多个面,则返回 1;否则返回 0。 |
如果 Allocation 是立方体贴图,则如果存在多个面,此函数返回 1。在所有其他情况下,它返回 0。
使用 rsGetDimHasFaces() 获取当前正在运行的内核的维度。
rsAllocationGetDimLOD : 是否存在细节级别
uint32_t rsAllocationGetDimLOD(rs_allocation a); |
返回值
如果存在多个 LOD,则返回 1;否则返回 0。 |
查询 Allocation 是否存在多个细节级别。这对于 mipmap 非常有用。
使用 rsGetDimLod() 获取当前正在运行的内核的维度。
rsAllocationGetDimX : X 维度的大小
uint32_t rsAllocationGetDimX(rs_allocation a); |
返回值
Allocation 的 X 维度。 |
返回 Allocation 的 X 维度的大小。
使用 rsGetDimX() 获取当前正在运行的内核的维度。
rsAllocationGetDimY : Y 维度的大小
uint32_t rsAllocationGetDimY(rs_allocation a); |
返回值
Allocation 的 Y 维度。 |
返回 Allocation 的 Y 维度的大小。如果 Allocation 的维度少于两个,则返回 0。
使用 rsGetDimY() 获取当前正在运行的内核的维度。
rsAllocationGetDimZ : Z 维度的大小
uint32_t rsAllocationGetDimZ(rs_allocation a); |
返回值
Allocation 的 Z 维度。 |
返回 Allocation 的 Z 维度的大小。如果 Allocation 的维度少于三个,则返回 0。
使用 rsGetDimZ() 获取当前正在运行的内核的维度。
rsAllocationGetElement : 获取描述 Allocation 单元格的对象
rs_element rsAllocationGetElement(rs_allocation a); |
参数
a | 要获取数据的 Allocation。 |
---|
返回值
描述 Allocation 布局的 Element。 |
获取描述 Allocation 单元格的类型、kind 和其他特性的 Element 对象。请参阅下面的 rsElement* 函数。
rsClearObject : 释放对象
void rsClearObject(rs_allocation* dst); | |
void rsClearObject(rs_element* dst); | |
void rsClearObject(rs_font* dst); | 编译为 32 位时有效。从 API 级别 23 及更高版本中移除。 |
void rsClearObject(rs_mesh* dst); | 编译为 32 位时有效。从 API 级别 23 及更高版本中移除。 |
void rsClearObject(rs_program_fragment* dst); | 编译为 32 位时有效。从 API 级别 23 及更高版本中移除。 |
void rsClearObject(rs_program_raster* dst); | 编译为 32 位时有效。从 API 级别 23 及更高版本中移除。 |
void rsClearObject(rs_program_store* dst); | 编译为 32 位时有效。从 API 级别 23 及更高版本中移除。 |
void rsClearObject(rs_program_vertex* dst); | 编译为 32 位时有效。从 API 级别 23 及更高版本中移除。 |
void rsClearObject(rs_sampler* dst); | |
void rsClearObject(rs_script* dst); | |
void rsClearObject(rs_type* dst); |
通知运行时,此句柄将不再用于访问相关对象。如果这是对该对象的最后一个句柄,则可能会发生资源回收。
调用此函数后,*dst 将被设置为空句柄。请参阅 rsIsObject()。
rsElementGetBytesSize : Element 的大小
uint32_t rsElementGetBytesSize(rs_element e); | 添加于 API 级别 16 |
返回此 Element 实例化时占用的字节大小。
rsElementGetDataKind : Element 的 kind
rs_data_kind rsElementGetDataKind(rs_element e); | 添加于 API 级别 16 |
返回 Element 的数据 kind。这用于解释像素数据。
请参阅 rs_data_kind。
rsElementGetDataType : Element 的数据类型
rs_data_type rsElementGetDataType(rs_element e); | 添加于 API 级别 16 |
返回 Element 的基本数据类型。这可以是类似于 C/C++ 的类型(例如 RS_TYPE_UNSIGNED_8)、句柄(例如 RS_TYPE_ALLOCATION 和 RS_TYPE_ELEMENT),或者更复杂的数值类型(例如 RS_TYPE_UNSIGNED_5_6_5 和 RS_TYPE_MATRIX_4X4)。请参阅 rs_data_type。
如果 Element 描述矢量,此函数返回其中一个项的数据类型。使用 rsElementGetVectorSize 获取矢量的大小。
如果 Element 描述结构,则返回 RS_TYPE_NONE。使用 rsElementGetSub* 函数探索此复杂 Element。
rsElementGetSubElement : 复杂元素的子元素
rs_element rsElementGetSubElement(rs_element e, uint32_t index); | 添加于 API 级别 16 |
参数
e | 要查询的 Element。 |
---|---|
index | 要返回的子元素的索引。 |
返回值
给定索引处的子元素。 |
对于表示结构的 Elements,此函数返回指定索引处的子元素。
如果 Element 不是结构,或者索引大于或等于子元素的数量,则返回无效句柄。
rsElementGetSubElementArraySize : 复杂元素的子元素的数组大小
uint32_t rsElementGetSubElementArraySize(rs_element e, uint32_t index); | 添加于 API 级别 16 |
参数
e | 要查询的 Element。 |
---|---|
index | 子元素的索引。 |
返回值
子元素的数组大小。 |
对于复杂 Elements,子元素可以是静态大小的数组。此函数返回索引处子元素的数组大小。此子元素重复不同于固定大小矢量。
rsElementGetSubElementCount : 子元素的数量
uint32_t rsElementGetSubElementCount(rs_element e); | 添加于 API 级别 16 |
参数
e | 要获取数据的 Element。 |
---|
返回值
子元素的数量。 |
元素可以是简单的,例如 int 或 float,也可以是具有多个子元素的结构。此函数对于简单元素返回零,对于复杂元素返回子元素的数量。
rsElementGetSubElementName : 子元素的名称
uint32_t rsElementGetSubElementName(rs_element e, uint32_t index, char* name, uint32_t nameLength); | 添加于 API 级别 16 |
参数
e | 要获取数据的 Element。 |
---|---|
index | 子元素的索引。 |
name | 用于存储名称的数组地址。 |
nameLength | 提供的名称数组的长度。 |
返回值
复制的字符数,不包括 null 终止符。 |
对于复杂 Elements,此函数返回指定索引处的子元素的名称。
rsElementGetSubElementNameLength : 子元素名称的长度
uint32_t rsElementGetSubElementNameLength(rs_element e, uint32_t index); | 添加于 API 级别 16 |
参数
e | 要获取数据的 Element。 |
---|---|
index | 子元素的索引。 |
返回值
子元素名称的长度,包括 null 终止符。 |
对于复杂 Elements,此函数返回指定索引处子元素名称的长度。
rsElementGetSubElementOffsetBytes : 实例化子元素的偏移量
uint32_t rsElementGetSubElementOffsetBytes(rs_element e, uint32_t index); | 添加于 API 级别 16 |
参数
e | 要获取数据的 Element。 |
---|---|
index | 子元素的索引。 |
返回值
字节偏移量。 |
此函数返回指定子元素实例化在 Element 实例化中的相对位置。
例如,如果 Element 描述一个 32 位浮点数后跟一个 32 位整数,则第一个返回的偏移量将是 0,第二个返回的偏移量将是 4。
rsElementGetVectorSize : Element 的矢量大小
uint32_t rsElementGetVectorSize(rs_element e); | 添加于 API 级别 16 |
参数
e | 要获取数据的 Element。 |
---|
返回值
元素矢量的长度。 |
返回 Element 的矢量大小。如果 Element 不表示矢量,则返回 1。
rsGetAllocation : 返回给定指针的 Allocation
rs_allocation rsGetAllocation(const void* p); |
已弃用。 此函数已弃用,并将在未来的 SDK 版本中移除。
返回给定指针的 Allocation。该指针应指向有效分配内部。如果该指针并非来自有效 Allocation,则结果未定义。
rsIsObject : 检查空句柄
bool rsIsObject(rs_allocation v); | |
bool rsIsObject(rs_element v); | |
bool rsIsObject(rs_font v); | 编译为 32 位时有效。从 API 级别 23 及更高版本中移除。 |
bool rsIsObject(rs_mesh v); | 编译为 32 位时有效。从 API 级别 23 及更高版本中移除。 |
bool rsIsObject(rs_program_fragment v); | 编译为 32 位时有效。从 API 级别 23 及更高版本中移除。 |
bool rsIsObject(rs_program_raster v); | 编译为 32 位时有效。从 API 级别 23 及更高版本中移除。 |
bool rsIsObject(rs_program_store v); | 编译为 32 位时有效。从 API 级别 23 及更高版本中移除。 |
bool rsIsObject(rs_program_vertex v); | 编译为 32 位时有效。从 API 级别 23 及更高版本中移除。 |
bool rsIsObject(rs_sampler v); | |
bool rsIsObject(rs_script v); | |
bool rsIsObject(rs_type v); |
如果句柄包含非 null 引用,则返回 true。
此函数不验证句柄中使用的内部指针是否指向实际的有效对象;它只检查是否为 null。
此函数可用于检查 rsElementGetSubElement() 返回的 Element,或查看是否已在句柄上调用了 rsClearObject()。
rsSamplerGetAnisotropy : Sampler 的各向异性值
float rsSamplerGetAnisotropy(rs_sampler s); | 添加于 API 级别 16 |
获取 Sampler 的各向异性值。
rsSamplerGetMagnification : Sampler 放大值
rs_sampler_value rsSamplerGetMagnification(rs_sampler s); | 添加于 API 级别 16 |
获取 Sampler 的放大值。
rsSamplerGetMinification : Sampler 缩小值
rs_sampler_value rsSamplerGetMinification(rs_sampler s); | 添加于 API 级别 16 |
获取 Sampler 的缩小值。
rsSamplerGetWrapS : Sampler S 环绕值
rs_sampler_value rsSamplerGetWrapS(rs_sampler s); | 添加于 API 级别 16 |
获取 Sampler 的 S 环绕值。
rsSamplerGetWrapT : Sampler T 环绕值
rs_sampler_value rsSamplerGetWrapT(rs_sampler s); | 添加于 API 级别 16 |
获取 Sampler 的 T 环绕值。