From: Graphics Renderscript overview
接觸 Renderscript 一陣子了,盡管官方文件顯少,但最佳的學習方式就是大量的程式碼閱讀,久了就會熟習為啥有 A 還是 B 的架構。據說 Renderscript 一開始是要設計給圖形運算的,以高效能、跨平台為出發點,不知不覺就設計出可以平行運算的架構,所以學習 Renderscript 別忘了繪圖運算跟平行處理這兩個方向。
關於 Renderscript 相關程式碼:
- 2D/3D 圖形運算
- Android Sample - RenderScript > HelloWorld
- Android Sample - RenderScript > Fountain
- Android Sample - RenderScript > FountainFbo
- Android Sample - RenderScript > Balls
- Android Sample - RenderScript > MiscSamples
- renderscript-examples > Gravity
- renderscript-examples > PageCurl
- renderscript-examples > Carousel
- android-renderscript-samples > Level
- 平行運算
我本身一開始是先接觸 HelloCompute 的,看懂之後又對 Carousel 的效果著迷,在沒有圖學背景,悄悄地啃食完了,深深覺得數學真的很奧妙。之後閒暇之餘,又看了 Fountain 、HelloWorld 、 Gravity 和 Balls 等範例,漸漸地就能夠把 Renderscript 雛形給建立好。
回憶起來,我覺得比較好的學習曲線:
- 平行運算
- HelloCompute> Balls
- 繪圖運算
- HelloWorld > Gravity > Fountain > Carousel
從 HelloWorld 的架構下,就能夠搞懂怎樣初始化一些繪圖的架構,例如 int root() 回傳的數值可代表畫面更新的頻率等,而 HelloCompute 則是專門做平行運算的架構。之所以把 Balls 擺在平行運算是因為裡頭有一個在 Renderscript 中呼叫 rsForEach 啦,而 HelloCompute 是在 Java 端呼叫 mScript.forEach_root ,更簡單的範例請參考 Renderscript Part 2 吧,算是把 HelloCompute 從 mScript.forEach_root 快速改寫成 rsForEach 的方式。
除此之外,最近也有一篇 R. Jason Sams 寫的一篇 Levels in Renderscript ,也是不錯的效能測試的文章。
沒有留言:
張貼留言