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

读写全局变量

读写全局变量是一个简单过程。你能够在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运行时。

你可能感兴趣的:(Android高级Renderscript---Andvanced Renderscript(五))