在RenderScript中,默认情况下对应一个输入,一个输出。但是在实际使用过程中,有时需要有多个输入,多个输出。可以采用rs_allocation来处理。
private void CreateScript(){
int[] s;
int[] s2,s3;
s=new int[10];
s2=new int[10];
s3=new int[10];
for(int i=0;i<10;i++){
s[i]=5;
}
mRS=RenderScript.create(this);
In1=Allocation.createSized(mRS, Element.I32(mRS), 10);
In2=Allocation.createSized(mRS, Element.I32(mRS), 10);
Out=Allocation.createSized(mRS, Element.I32(mRS), 10);
Out2=Allocation.createSized(mRS, Element.I32(mRS), 10);
In1.copyFrom(s);
for(int i=0;i<10;i++){
s[i]=10;
}
In2.copyFrom(s);
mScript=new ScriptC_test(mRS, getResources(), R.raw.test);
mScript.set_input2(In2);
mScript.set_output2(Out2);
mScript.forEach_root(In1,Out);
Out.copyTo(s2);;
Out2.copyTo(s3);
for(int i=0;i<10;i++){
Log.v("lucas","i="+i+" "+s2[i]+" "+s3[i]);
}
}
RS代码:
#include "rs_allocation.rsh"
rs_allocation input2;
rs_allocation output2;
int __attribute__((kernel)) root(int v_out,uint32_t x){
rsSetElementAt_int(output2, x, x);
return *(int*)rsGetElementAt(input2,x);
}
输出:
V/lucas (25659): i=0 10 0
V/lucas (25659): i=1 10 1
V/lucas (25659): i=2 10 2
V/lucas (25659): i=3 10 3
V/lucas (25659): i=4 10 4
V/lucas (25659): i=5 10 5
V/lucas (25659): i=6 10 6
V/lucas (25659): i=7 10 7
V/lucas (25659): i=8 10 8
V/lucas (25659): i=9 10 9