您的位置:首页 > 移动开发 > Android开发

Android高级Renderscript---Andvanced Renderscript(五)

2017-02-23 17:24 309 查看
读写全局变量

读写全局变量是一个简单过程。你能够在Android框架层使用访问器方法,或者在Renderscript代码层直接设置它们。对于在Renderscript代码中的任何改变都要记住,这种改变不会传递给Android框架层。

例如,在一个名叫rsfile.rs文件中给出了一下结构体:

typedefstructPoint{

       int x;

       int y;

}Point_t;

 

Point_t point;

你能够像下面示例这样直接在rsfile.rs文件中给它赋值。这些值不能够传递给Android框架层:

   point.x = 1;
   point.y = 1;

你能够像下面这样在Android框架层给这个结构体赋值。这些值会被传递给Renderscript运行时层:

   ScriptC_rsfile mScript;
 
   ...
 
   Item i = new ScriptField_Point.Item();
   i.x = 1;
   i.y = 1;
   mScript.set_point(i);

你能够像下面这样在Renderscript代码中读取变量的值:

   rsDebug("Printing out a Point",
point.x, point.y);

你能够使用下面的代码在Android框架层读取变量的值。要牢记,这段代码只会返回在Android框架层设置的那个值。如果只是在Renderscript运行时层设置的值,那么你将会获得一个null指针异常:

   Log.i("TAGNAME", "Printing out a Point: " + mScript.get_point().x + " " + mScript.get_point().y);
   System.out.println(point.get_x() + " " + point.get_y());

 

读写全局指针

假设在Android框架层已经分配了内存,并且把它绑定到了Renderscript运行时上,通过使用get和set方法从Android框架层读写那个指针的内存。在Renderscript运行层,你能够像普通的方法那样使用指针读写内存,并且对应的变化会被传递给Android框架层,而不像静态分配的内存。

例如,在名叫rsfile.rs的文件中给出了下列指针:

   typedef struct Point {
       int x;
      int y;
   } Point_t;
 
   Point_t *point;

假设在Android框架层已经分配内存,那么你就能够像普通方法那样访问结构体中的值。通过指针变量对结构体进行的任何改变都会自动的对Android框架层有效:

   point[index].x = 1;
   point[index].y = 1;

在Android框架层也能够很好的读写指针的值:

   ScriptField_Point p = new ScriptField_Point(mRS, 1);
   Item i = new ScriptField_Point.Item();
   i.x=100;
   i.y = 100;
   p.set(i, 0, true);
   mScript.bind_point(p);
 
   points.get_x(0);            //read x and y from index 0
points.get_x(0);

 

一旦内存被绑定,在每次改变内存中的值时,不必重新把该内存绑定给Renderscript运行时。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  RenderScript