Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android高級Renderscript---Andvanced Renderscript(一)

Android高級Renderscript---Andvanced Renderscript(一)

編輯:關於Android編程

因為利用Renderscript的應用程序依然運行在Android虛擬機(VM)內部,所以能夠訪問所有你熟悉的框架API,但也可在適當的時機利用Renderscript。為了促進Renderscript運行時和框架之間的相互作用,利用中間層代碼來幫。助兩個代碼層之間的通信和內存管理。本文深入討論不同代碼層的更多細節,以及Android VM和Renderscript運行時之間是共享內存的。

Renderscript Runtime層

Renderscript 代碼被編譯,並且在一個簡潔而明確的Runtime層被執行。Renderscript運行時API提供了對密集計算的支持,它能夠方便而自動的擴展到可用處理器內核上。

注意:NDK中標准的C函數保證要運行在CPU上,所以Renderscript不能訪問這些類庫,因為Renderscript被設計成要運行在不同類型的處理器上。

Renderscript代碼要定義在Android工程src/目錄中的*.rs和*.rsh文件中。通過llvm編譯器Renderscript代碼被編譯成中間字節碼,llvm編譯器是作為Android編譯的一部分來運行的。當應用程序在設備上運行時,該字節碼會通過駐留在設備上的另一個llvm編譯器即時的編譯成機器碼。該機器碼會針對設備進行優化並被緩存,因此後續對該Renderscript的使用不需要重新編譯該字節碼。

Renderscript運行時類庫包括以下一些關鍵的功能:

1. 內存分配請求的功能;

2. 帶有標量和矢量類型的數學函數庫,該函數庫是許多共同例程的重載版本。如加法運算、乘法運算、點陣運算、叉積運算以及原子計算和比較函數等都是有效的;

3. 原始數據和向量、矩陣、日期和時間的轉換;

4. 支持Renderscript系統的數據類型和結構,如針對向量類型所定義的二維、三維、四維向量;

5. 日志函數。

反射層

反射層是一組由Android編譯工具生成的類,使用這些類允許從Android框架中訪問Renderscript運行時。該層還提供了一些方法和構造器,它們允許使用在Renderscript代碼中定義的指針所指向的內存來進行內存分配和相關工作。下面列出了一些主要的反射組件:

1. 你創建的每個.rs文件都會生成一個ScriptC類型的名叫project_root/gen/package/name/ScriptC_renderscript_filename的類,這個文件是你的.rs文件的.java版,你能夠在Android框架中調用這個類。該類包含了從.rs文件中反射來的以下項目:

    A. 非靜態函數;

    B.非靜態的,全局的Renderscript變量。Android編譯工具會給每個變量生成訪問器方法,以便能夠在Android框架中讀寫這些Renderscript變量。如果一個全局變量在Renderscript運行時層被初始化,那麼那些初始化的值會被用於初始化Android框架層中對應的變量。如果全局變量被標記為const,那麼就不會生成set方法。

    C.全局指針www.2cto.com

一個被反射到自己類的名叫project_root/get/package/name/ScriptField_struct_name的struct,它繼承Script.FielBase類。這個代表了一個struct數組,它允許給這個struct的多個實例分配內存。

 


作者:FireOfStar
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved