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));
}


, , , , ,

changyy 發表在 痞客邦 PIXNET 留言(0) 人氣()