RenderScript(渲染脚本)

RenderScript是一个运行在高性能Android系统上计算密集型任务的框架,主要面向数据并行处理,加强的窜行计算密集工作也能从中受益。RenderScript运行时将在设备上的所有可用处理器上并行工作,例如多核CPUs,GPUs,或DSPs,是的不必将注意力放在工作调度或者负载均衡上,而是算法的表达上。RenderScript在图片处理,计算摄影和电脑视觉上的作用尤为有用。

开始运用RenderScriot之前,有两个主要的概念需要明白:

1.高性能计算内核都是用C99-derived写的。

2.使用Java API管理RenderScript资源的生命周期和控制内核执行。

 

渲染脚本内核:

渲染脚本为<项目>/src/directory的a .rs,每个.rs文件都是脚本。每个脚本包含自己的内核,函数和变量。

一个脚本能够包含:

1.一个编译指示声明(#pragma version(1)),用来声明当前渲染脚本内核当前的版本,目前只有1。

2.一个编译指示声明(#pragma rs java_package_name(com.example.app)),用来声明从渲染脚本中反射出来的java类的包名。.rs文件必须是应用程序包中的一部分,而不是作为项目库中的一部分。

3.一些调用函数,有一个单线程渲染脚本调用函数可以让你带任意参数声明。这在初始化设置和串行计算中很有用。

4.一些全局脚本,一个全局脚本相当于一个全局变量。这些全局脚本往往用于向RenderScript内核中传递参数。

5.一些计算内核,内核通过配置的每个元素并行计算函数。

一个简单的内核例如:

uchar4 __attribute__((kernel)) invert(char4 in, unint32_t x, uint32_t y){
uchar4 out = in;
out.r = 225 - in.r;
out.g = 225 - in.g;
out.b = 225 - in.b;
return out;
}
多数情况下,这等价于C函数。__attribute__((kernel))表示这是一个渲染脚本内核而不是一个调用函数。

6.一个可选的init()函数。

7.一些静态全局变量和函数。


设置浮点数精度:

#pragma rs_fp_full(默认)

#pragma rs_fp_relaxed(flush-to-zero for denorms and round-towards-zero)

#pragma rs_fp_imprecise


RenderScriptAPI的使用:

两种方式

1.android.renderscript:3.0和更高

2.android.support.v8.renderscript:这是一个支持包,使用在2.2和更高

建议使用第二种方式,特定情况下开发者也可以声明第一种方式实现


android.support.v8.renderscript

为了能使用支持库中的renderscript,需要确保必要的开发环境满足一下要求

1.Android SDK Tool版本为22.2或者更高

2.Android SDK Build-tools版本为18.1.0或更高

注意:Support Library RenderScript不支持Android Studio和Gradle-based builds.


在eclipse中使用

1.确保Android SDK Tool和Android SDK Build-tools的版本

2.打开project.properties文件

3.在project.properties中添加

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

4.在程序中使用Renderscript,导入支持包

import android.support.v8.renderscript.*;


在代码中使用Renderscript

1.Initialize a RenderScript context

2.Create at least one Allocation to be passed to a script

3.Create whatever scripts are necessary

4.Populate Allocations with data

5.Set any necessary script globals

6.Launch the appropriate kernels

7.Copy data out of Allocation objects

8.Tear down the RenderScript context




























你可能感兴趣的:(Android)