RenderScript: Android 3.0 中使繪圖效能提升的祕密武器

Android 在繪圖的性能表現在差不多等級的硬體規格上,跟 iPhone 比起來一直都不怎麼令人滿意,就算是 NDK ,頂多就是與 iPhone 打平而已。於是 Google 從 2.0 在原始碼中就開始出現了 RenderScript ,也陸續看到使用 RenderScript API 的 Live Wallpaper 範例。

終於,經過大幅度的改進後,在 Honeycomb 中正式的發佈了這個量身打造的殺手級 Framework!

說了這麼多,讓我們從上面引用的官方部落格文章一起來看看到底有多厲害?

一、 專門設計來處理 3D Rendering,提供一個低階操作而高效能的 APIs

其實大家對新東西的出現會有排斥是難免的,所以 Google 也不是打算推出 RenderScript 來取代任何東西,而是給開發者多一個選擇。而推出這個的最主要目的就是給那些想儘可能提升自己應用程式效能的開發者族群使用。(或是將之使用在效能表現特別重要的部分程式區段)

二、 不只繪圖、還可以計算

RenderScript 提供了三大工具:
a. 透過硬體加速實現的 3D Rendering API
b. 類似於 CUDA 的 Compute API
c. 相容 C99 的程式語言

三、 可「跨平台」還具有比擬「原生應用程式效能」的框架

前面提過 NDK 可以解決效能的問題,但卻沒辦法具有跨平台的特性。而 RenderScript 提供了這個解決方案,使用 RenderScript 寫好的程式,並不是在安裝的時候編譯,而是在執行的時候動態編譯(Just-In-Time Compiling)。因此,編譯出來的程式是針對該機器做最佳化的,這解決了 Device Fragmentation,也就是說,開發者再也不必擔心使用者的手機到底夠不夠好、有沒有 GPU…等等的問題,全部都交給 RenderScript 去擔心就好,沒有 GPU,RenderScript 寫好的程式就交由 CPU 來處理。(背後的編譯技術其實是使用 LLVM,未來也將會跟官方部落格一樣繼續探討其技術細節)

四、與 Dalvik Code 完美的結合

開發者可以透過撰寫 RenderScript 來提供自定義的功能給 Java 端使用(Dalvik Code),如同早期在 Eclair 中出現的 live wallpapers 與 3D application launcher 就是這樣實現的。

五、整合 GL ES 2.0 作為 Render

因此,提供了可程式化的 shader 支援、3D 模組載入、以及更有效的分配管理。以下圖為例,就是載入了透過 Maya 創建、從 Collada 檔案轉換而來的 A3D 檔案(儲存 RS 物件的檔案格式)。