Android - RenderScript 渲染脚本
在本章中,我们将学习 Android RenderScript。 通常android上的应用程序被设计为消耗尽可能少的资源。 但是某些应用程序,例如某些 3D 游戏,需要在 android 上进行高级处理。
为了向这些应用程序提供高性能,android 引入了 RenderScript。 它是基于 android 的框架,用于运行执行非常高计算任务的应用程序。 这个框架的开发是在 android 提供的 Native Development Kit(NDK) 中完成的。 RenderScript 对于执行以下类型操作的应用程序非常有用 −
- 3D 渲染
- 图像处理
- 计算摄影
- 计算机视觉
RenderScript 的工作原理
RenderScript 框架基本上是基于数据并行计算的。 它将您的应用程序工作负载分配到您设备上所有可用的处理器上,例如多核 CPU 或 GPU。
这种工作负载的并行分布将程序员从负载平衡和工作调度的压力中解脱出来。 您可以为您的应用编写更详细、更复杂的算法,而无需担心计算能力。
如何开始
要使用 RenderScript 框架,您必须具备以下两个条件−
- 一个 RenderScript 内核
- 渲染脚本 API
一个 RenderScript 内核
内核是管理数据处理指令和管理中央处理单元工作负载的程序。内核是操作系统的基本组成部分。
同样地,为了运行 RenderScript 框架,我们需要一个名为 Kernel 的书面脚本来管理来自我们应用程序的所有数据处理请求,并利用 NDK 提供的 android OS 的更多功能,如前所述,RenderScript 的开发已经完成 在 Android 的 Native Development Kit 中。
内核脚本是用 C 语言的 C-99 标准编写的。 该标准在 C++ 开发之前。 RenderScript 内核脚本文件通常放在 .rs 文件中。 每个文件都称为脚本。 RenderScript 内核脚本可以包含以下元素 −
序号 | 元素 & 描述 |
---|---|
1 |
A Language declaration 它声明了此脚本中使用的 RenderScript 内核语言的版本。 |
2 |
A package declaration 此声明命名将受此内核代码影响的 Java 类的包名称。 |
3 |
Invokable functions 您可以使用任意参数从您的 JAVA 代码中调用这些可调用函数。 |
4 |
脚本全局变量 这些就像在 C 和 C++ 编程语言中定义的变量一样。 您可以从您的 JAVA 代码中访问这些变量。 |
以下是内核的示例代码 −
uchar4 __convert__((kernel)) invert(uchar4 in, uint32_t x, uint32_t y) { uchar4 out = in; out.r = 255 - in.r; out.g = 255 - in.g; return out; }
RenderScript API
如果你想在你的 API 中使用 RenderScript,你可以通过以下两种方式来实现 −
序号 | APIs & 描述 |
---|---|
1 |
android.renderscript 此 API 在运行 Android 3.0 及更高版本的设备上可用。 |
2 |
android.support.v8.renderscript 此 API 在运行 Android 2.2 及更高版本的设备上可用。 |
Android 支持库需要以下工具 −
- 最新的 Android SDK 工具版本
- 最新的 Android SDK 构建工具版本
如何使用 RenderScript 支持库
首先在你的项目中打开 project.properties 文件并在文件中添加以下行 −
renderscript.target=18 renderscript.support.mode=true sdk.buildtools=18.1.0
现在打开使用 RenderScript 的主类并为支持库类添加导入,如下所示 −
import android.support.v8.renderscript.*;
以下是我们在 project.properties 文件中添加的上述属性的用途。
序号 | 项目属性 & 描述 |
---|---|
1 |
renderscript.target 它指定要生成的字节码版本。 |
2 |
renderscript.support.mode 它为生成的字节码指定一个兼容的版本来回退。 |
3 |
sdk.buildtools 它指定要使用的 Android SDK 构建工具的版本。 |
现在调用您的 RenderScript 内核函数并在您的应用程序中计算复杂的算法。