« なぜ JPEG XR ? | メイン | RenderScript の invoke は非同期実行 »
2014年06月09日
Android:: invoke で呼び出すシンプルな RenderScript
Tweet @jin1016をフォローRenderScript は、非同期で実行され、非 static 関数が返り値を持つことは出来ない。
RenderScript 自体は、C言語(C99)で記述可能。
ネット上には実際に使用しているサンプルが極端に少ない。
と言うことで、シンプルな RenderScript を書いてみる。
test.rs
#pragma version(1) |
加算して、値を返す関数を定義した RenderScript 。
この test.rs は、以下のように書けそうな気がする。
int value; |
でも、うまくいかない。
value に入れた値を取得できない。
もしかしたら何か方法があるのかもしれないが、わからない。
話を戻して、Java の呼び出し側は以下のような形。
mRS = RenderScript.create(this); |
RenderScript の rsSendToClient でクライアント(Java)側に通知を送れるので、Java 側でそれを受けてログに出力している。
ここまでわかれば、好きな C関数を RenderScript 化して Java から楽に呼び出せる。
ただ、RenderScript は malloc が使えない(Java側で確保して渡す形)ので、malloc が必要な処理は難しい。
うまくいかないパターンの補足
RenderScript.finish で完了を待つっぽいこと書いているけど、これで待ってもうまくいかない。
RenderScript は、非同期実行なので、他の何か完了待ちが必要か、値を Java 側からアクセスできるようにコピーする処理が走るタイミングがありそうだけど、invoke 系ではそれがうまく働かないのかもしれない。
rsForEach 系が必要なのだろうか。
この辺りは rsForEach 系を使う時に調査しようと思う。
投稿者 Takenori : 2014年06月09日 20:18
comments powered by Disqus