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