• 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 核心函式並在您的應用程式中計算複雜的演算法。

廣告