创建Renderscript
Renderscript扩大了设备上可用的处理器内核的范围。这种能力是通过名叫rsForEach()(或者是Android框架级别下的forEach_root()方法)方法来获得的。它会自动的区分访问设备设备上可用的处理器内核的工作。目前,Renderscript只能利用CPU内核的优势,但是在将来,它们会能够运行在其他类型的处理器上,如GPU和DSP等。
实现一个Renderscript要涉及创建一个包含Renderscript代码的.rs文件和在Android框架级别下用forEach_root()方法调用该文件(或者是在Renderscript级别下用rsForEach()函数调用该文件)。下图介绍了如何建立一个典型的Renderscript:
图2.Renderscript概要
以下章节介绍如何创建一个简单的Renderscript,并且要在一个Android应用程序中使用它。这个例子使用了SDK开发指南中提供的HelloCompute Renderscript示例。
创建Renderscript文件
Renderscript代码要保留在<project_root>/src/目录中的*.rs和*.rsh文件中。代码中包含了计算的逻辑和所有必要的变量和指针的声明。通常,每个*.rs文件要包含下列项目:
1.编译指示声明(#pragma rs java_package_name(package.name)),它声明了该Renderscript反射所对应的*.java类名;
2.编译指示声明(#pragma version(1)),它声明了你要使用的Renderscript的版本(目前只能是1);
3.一个名叫root()的主函数,该root()函数被rsForEach函数调用,并允许它调用Renderscript代码和在有效的多内核中执行。root()函数必须返回void并且要接收下列参数:
A.分配给Renderscript的输入和输出使用的内存的指针。在Android3.2(API level 13)平台以前的版本中同时需要这两个指针。Android4.0(API Level 14)以后只分配其中之一就可以了。
B.下列参数是可选的,但是如果使用它们就必须同时提供它们:
除了必要的内存分配之外,一个Renderscript执行计算所可能需要的用户定义数据的指针,它能够指向一个简单的原始类型的数据,也可以指向一个复杂的结构体。
用户定义数据的大小。
4.一个可选的init()方法。这个方法允许再root()方法运行之前做一些初始化的工作,如初始化变量等。这个函数运行一次,并且在Renderscript启动时,Renderscript中其他工作被执行之前,该方法会被自动的调用。
5.在Renderscript代码中要使用的任何变量、指针和结构体(如果需要,能够在*.rsh文件中声明)。
下列代码显示了mono.rs文件是如何实现的:
#pragma version(1)
#pragma rs java_package_name(com.example.android.rs.hellocompute)
//multipliers to convert a RGB colors to black and white
const static float3 gMonoMult = {0.299f, 0.587f, 0.114f};
void root(const uchar4 *v_in, uchar4 *v_out) {
//unpack a color to a float4
float4 f4 = rsUnpackColor8888(*v_in);
//take the dot product of the color and the multiplier
float3 mono = dot(f4.rgb, gMonoMult);
//repack the float to a color
*v_out = rsPackColorTo8888(mono);
}
分享到:
相关推荐
Dynamic blur of Image Views for Android. This library is based on RenderScript. You can find more detail about RenderScript here: RenderScript Includes library and small example project. Gradle ...
主要介绍了Android RenderScript高斯模糊的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Android RenderScript教程 作者:Ian G. Clifton链接: : 概述 该存储库包含我编写的RenderScript教程的源代码。 源代码与教程文章可能会有一些差异(例如,为了使所有代码适合一个存储库而进行了一些小的改进和...
主要为大家详细介绍了Android RenderScript实现高斯模糊的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
分别为:RenderScript绘制字符串、RenderScript绘制颜色矩形、RenderScript绘制纹理矩形、RenderScript混合、RenderScript采样、RenderScript旋转的圆环(剪裁方式)、RenderScript中的光照、RenderScript中片元着色器...
renderScript_fina ,max批量渲染工具,可以一键渲染多个文件
用于低版本(API Level8及以上)的安卓系统的图像处理的库文件,例如模糊、矩阵运算等的图像处理
renderscript Google官方源码。
毛玻璃效果(亦称磨砂效果),近两年在移动端的UI设计上越来越流行,下面这篇文章主要介绍了Android利用RenderScript实现毛玻璃模糊效果的相关资料,文中给出了详细的示例代码,需要的朋友可以参考学习,下面来一起...
RenderScriptPlayground是一个示例性Android应用程序,显示了如何将RenderScript与Android Studio和Gradle一起使用。 应用程序正在使用RenderScript支持库,因此它应可与Android Froyo(2.2)一起使用。 入门 1.克隆...
RenderScript 计算的Sample
实现高斯模糊的工具包,github开源项目https://github.com/android/renderscript-intrinsics-replacement-toolkit打包生成。
简单的RenderScript实现照片取反色
android.support.v8.renderscript相关类找不到的错误可以下载使用
史上最强YUV转换RenderScript,支持转换为RGBA、BGRA,同时支持旋转和翻转。 YUV数据格式支持NV21、YV12、YUV420_888,对应Android Camera1API和Camera2 API的YUV处理。 这段时间在做一些Android Camera数据处理相关...
Day 3_ Graphics and Camera Android Bootcamp 2017 - Color Management Android Bootcamp 2017 ...Android Bootcamp 2017—RenderScript Android Bootcamp 2017—Sdcardfs Android Bootcamp 2017—Soong Build System
使用OpenGL的Android快速画笔绘画模拟_Java_RenderScript