• Android Video Tutorials

Android - RenderScript



本章我们将学习 Android RenderScript。通常,Android 应用的设计目标是尽可能少地占用资源。但一些应用,例如一些 3D 游戏,需要在 Android 上进行高水平的处理。

为了为这些应用提供高性能,Android 引入了 RenderScript。它是一个基于 Android 的框架,用于运行执行高计算任务的应用。此框架的开发是在 Android 提供的原生开发工具包 (NDK) 中完成的。RenderScript 对于执行以下类型操作的应用非常有用:

  • 3D 渲染
  • 图像处理
  • 计算摄影
  • 计算机视觉

RenderScript 的工作原理

RenderScript 框架基本上是基于数据并行计算的。它将应用程序的工作负载分配到设备上可用的所有处理器上,例如多核 CPU 或 GPU。

这种并行工作负载分配使程序员无需担心负载平衡和工作调度。您可以为您的应用程序编写更详细和复杂的算法,而无需担心计算能力。

如何开始

要使用 RenderScript 框架,您必须具备以下两项:

  • RenderScript 内核
  • RenderScript API

RenderScript 内核

内核是一个管理数据处理指令并在中央处理单元上管理工作负载的程序。内核是操作系统的一个基本部分。

同样,要运行 RenderScript 框架,我们需要一个名为内核的脚本文件来管理来自我们应用程序的所有数据处理请求,并利用 NDK 提供的 Android 操作系统的更多功能,如前所述,RenderScript 的开发是在 Android 的原生开发工具包中完成的。

内核脚本是用 C 语言的 C99 标准编写的。此标准早于 C++ 的开发。RenderScript 内核脚本文件通常放在 **.rs** 文件中。每个文件都称为脚本。RenderScript 内核脚本可以包含以下元素:

序号 元素和描述
1

语言声明

它声明此脚本中使用的 RenderScript 内核语言的版本。

2

包声明

此声明命名将受此内核代码影响的 Java 类的包名。

3

可调用函数

您可以使用任意参数从您的 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,您可以通过以下两种方式进行:

序号 API 和描述
1

android.renderscript

此 API 可用于运行 Android 3.0 及更高版本的设备。

2

android.support.v8.renderscript

此 API 可用于运行 Android 2.2 及更高版本的设备。

要使用 Android Support Library,需要以下工具:

  • 最新版本的 Android SDK 工具
  • 最新版本的 Android SDK Build-tools

如何使用 RenderScript Support Library

首先打开项目中的 **project.properties** 文件,并在文件中添加以下几行:

renderscript.target=18
renderscript.support.mode=true
sdk.buildtools=18.1.0

现在打开使用 RenderScript 的主类,并添加对 Support Library 类的导入,如下所示:

import android.support.v8.renderscript.*;

以下是我们在 **project.properties** 文件中添加的上述属性的目的。

序号 项目属性和描述
1

renderscript.target

它指定要生成的字节码版本。

2

renderscript.support.mode

它指定生成的字节码回退的兼容版本。

3

sdk.buildtools

它指定要使用的 Android SDK build-tools 版本。

现在调用您的 RenderScript 内核函数并在您的应用程序中计算复杂的算法。

广告