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.一些计算内核,内核通过配置的每个元素并行计算函数。

一个简单的内核例如:

<span style="font-family:Microsoft YaHei;">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;
}
</span>
多数情况下,这等价于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中添加

<span style="font-family:Microsoft YaHei;">renderscript.target=18
renderscript.support.mode=true
sdk.buildtools=18.1.0</span>

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

<span style="font-family:Microsoft YaHei;">import android.support.v8.renderscript.*;
</span>


在代码中使用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




























  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值