RenderScript多個輸入處理

在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

發佈了40 篇原創文章 · 獲贊 7 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章