2012年3月31日 星期六

Android 開發教學筆記 - 使用 RenderScript 之 rsSendToClient


From: Compute Renderscript overview


由於 Renderscript 為 Async 架構,因此當 RS 做完事後,希望他送個訊息到 Java 那層時,就會用到 rsSendToClient/rsSendToClientBlocking 等函數來使用,只是翻了文件後,僅有一句話介紹、沒有文件,更別說教學 Orz 後來發現網路上也有人在 stackoverflow 詢問,但一樣沒結果。幸運地,我找到了 Android 系統程式碼!


程式碼:


frameworks/ex/carousel
frameworks/ex/carousel/java/com/android/ex/carousel/carousel.rs
frameworks/ex/carousel/java/com/android/ex/carousel/CarouselRS.java


用法:


HelloCompute.java:


public class HelloCompute extends Activity {

       // ...
       private RSMessageHandler mRsMessage = new RSMessageHandler() {
              public void run() {
                     switch(mID) {
                            default:
                                   Log.e("mID","value:"+mID+",data[0]:"+mData[0]+",data[1]:"+mData[1]+", data[2]:"+mData[2]);
                     }
              }
       };

       // ...
       public void createScript() {
              mRS = RenderScript.create(this);
              mRS.setMessageHandler(mRsMessage);
              mScript = new ScriptC_mono(mRS, getResources(), R.raw.mono);
              mScript.invoke_fireInRS();
       }
}


mono.rs:


#pragma version(1)
#pragma rs java_package_name(com.example.android.rs.hellocompute)


#include "rs_graphics.rsh"


void fireInRS() {
        int data[3];
        data[0] = 1;
        data[1] = 2;
        data[2] = 3;
        rsSendToClient(1, data, sizeof(data));
}


2 則留言:

  1. 作者已經移除這則留言。

    回覆刪除
  2. 感谢大神!!!!RenderScript国内的技术文章太少了~

    回覆刪除