Renderscript in Android 3.x
-
Upload
dominik-helleberg -
Category
Technology
-
view
2.466 -
download
5
description
Transcript of Renderscript in Android 3.x
RenderScript in Android 3.x
Dominik Helleberg / Inovex GmbH
http://twitter.com/_cirrus_
Ziele / Agenda • Konzepte / Vor- und Nachteile von RenderScript • Entscheidung für den Einsatz von RS im nächsten Projekt
• Überblick RS -> APIs, Architektur, Tools • RS Basics -> Datenstrukturen, Funktionen • Berechnungen mit RS -> Beispiel / Performance • OpenGL refresh • Grafik mit RS -> Beispiel / Demo • Grafik & Berechnungen kombinieren • RS im Context von Canvas, NDK & co. • Ausblick
RS -> The claim „RenderScript offers a high performance 3D graphics
rendering and compute API at the native level“
Pros • Portabilität • Performance • Usability
Cons • Complexity • Debugging / Tools • less Features
http://developer.android.com/guide/topics/renderscript/index.html
RS Intro / Overview • Neue Sprache (basierend auf C99 mit Erweiterungen) • Neue APIs (im Java-SDK und in RenderScript) • Tools • RS in Android 2.1
RS Intro / Overview • Seid Android 3.0 öffentlich verfügbar (API LEVEL 11)
RS Basics: Compiler -> Offline
LLVM-RS-CC sepia.rs
sepia.bc
SciptC_sepia.java
http://events.linuxfoundation.org/slides/2011/lfcs/lfcs2011_llvm_liao.pdf
SciptC_sepia.class
RS Basics: Compiler -> Online
libbcc sepia.bc GPU
s
CPUs
Dalvik JIT
http://events.linuxfoundation.org/slides/2011/lfcs/lfcs2011_llvm_liao.pdf
RS Basics: APIs • Java -> android.renderscript.*
• RS -> *.rsh (RenderScriptHeader) $ANDROID_SDK/platforms/android-11/renderscript/include/
• rs_cl.rsh -> tan, cos, pow
• rs_core.rsh -> Utility Funktionen: rsDebug • rs_graphics.rsh -> Grafik Funktionen (optional): rsgDrawMesh • rs_math.rsh -> Basis Funktionen: rand, rsForEach • rs_time.rsh -> rsUptimeMillis
• rs_types.rsh -> Datentypen: rs_matrix4x4
RS Basics: Datastructures • Element Repräsentiert eine Speicherstelle einer
Allocation, zum Beispiel uchar4
• Type Dimension(en) von Elementen
• Allocation Repräsentiert den allokierten Speicher
Elements und Types können auf SDK und RS level definiert werden, Allocations nur auf SDK level
RS Basics: functions / Syntax #pragma version(1) #pragma rs java_package_name(de.inovex.mobi.rsdemos)
void init() Grafik -> Initialisierung int root(int launchID) Grafik -> wird für jede Aktualisierung
des Screens aufgerufen void root(...) Berechnungen -> Wird für jedes zu
berechnende Element aufgerufen
void rsForEach(...) Ruft root(..) für jedes zu berechnende Element auf
RS Calculation: Sepia Filter
RS Calculation: Sepia Filter
344
605
350
0
100
200
300
400
500
600
700
Sepia Filter
RenderScript Java Java Threaded m
illis
econ
ds
RS Calculation: Mandelbrot
RS Calculation: Mandelbrot
6116
11080
6912
0
2000
4000
6000
8000
10000
12000
Mandelbrot
RenderScript Java Java Threaded m
illis
econ
ds
RS Graphics: OpenGL Refresh
Vertex Shader
Fragment Shader Blending
Program Vertex
Program Fragment
Program Store
OpenGL
RenderScript
RS Graphics: Basics
Java
RenderScript
RSSurfaceView
onTouch Event()
MessageQueue
bindRoot Script()
int root(int launchID) { //draw things }
RS Graphics: Logo Demo
RS Graphics: Cover Carousel
RS Graphics and Calculations
root() { rsForEach(...); rsgDrawMesh(...); return 10; }
CPU1
CPU2
root(...) { doCrazyStuff(); }
root(...) { doCrazyStuff(); }
RS Graphics and Calculations
RS Summary: Android Graphic APIs
• NDK -> C Code Portierung, low level C programming
• SDK
• Canvas API -> 2D Graphics
• OpenGL wrappers -> Simple 3D Graphics
• RenderScript -> High performance 3D
Graphics / Computations
RS Summary: Experience & Claims Pros • Portabilität
• Performance
• Usability
Cons • Complexity
• Debugging / Tools
• less Features
• Documentation
• Reach
RS Summary: Experience & Claims INFO/DEBUG(85): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** INFO/DEBUG(85): Build fingerprint: 'motorola/tervigon/wingray:3.2/HTJ85B/140714:user/release-keys' INFO/DEBUG(85): pid: 8462, tid: 8479 >>> de.inovex.mobi.rsdemos <<< INFO/DEBUG(85): signal 7 (SIGBUS), code 128 (?), fault addr 00000000 INFO/DEBUG(85): r0 00000001 r1 433a4266 r2 001aecf0 r3 433a425a INFO/DEBUG(85): r4 00000001 r5 433a4266 r6 00000000 r7 599cce08 INFO/DEBUG(85): r8 000013b0 r9 000013b0 10 599cce08 fp 00000001 INFO/DEBUG(85): ip a9d43910 sp 599ccd08 lr af9d7acc pc af9d7acc cpsr 00000010 INFO/DEBUG(85): d0 477fff800000ffff d1 3ef99342477fff00 INFO/DEBUG(85): d2 3fa5b5e89f667c0b d3 3fa55553e1053a42 INFO/DEBUG(85): d4 3fa5b5e89f667c0b d5 bf56ab7707e82c56 INFO/DEBUG(85): d6 3f80000026a7f65f d7 3f80000000000000 INFO/DEBUG(85): d8 4334000040490fdb d9 c44f0000444f0000 INFO/DEBUG(85): d10 0000000000000000 d11 0000000000000000 INFO/DEBUG(85): d12 0000000000000000 d13 0000000000000000 INFO/DEBUG(85): d14 0000000000000000 d15 0000000000000000 INFO/DEBUG(85): scr 60000013 INFO/DEBUG(85): #00 pc 00004acc /system/lib/libcutils.so (android_atomic_add) INFO/DEBUG(85): #01 pc 0001f5be /system/lib/libRS.so (_ZNK7android12renderscript10ObjectBase9incSysRefEv) INFO/DEBUG(85): #02 pc 00017d44 /system/lib/libRS.so INFO/DEBUG(85): #03 pc 0001a7ba /system/lib/libRS.so (_ZN7android12renderscript7Context16setProgramVertexEPNS0_13ProgramVertexE) INFO/DEBUG(85): #04 pc 0001a7d2 /system/lib/libRS.so (_ZN7android12renderscript28rsi_ContextBindProgramVertexEPNS0_7ContextEPv) INFO/DEBUG(85): #05 pc 00025e68 /system/lib/libRS.so INFO/DEBUG(85): libc base address: afdd3000 INFO/DEBUG(85): code around pc: INFO/DEBUG(85): af9d7aac e1853f92 e3530000 1afffffa e8bd8070 INFO/DEBUG(85): af9d7abc e92d4070 e1a04000 e1a05001 ebffffd1 INFO/DEBUG(85): af9d7acc e1950f9f e0802004 e1853f92 e3530000 INFO/DEBUG(85): af9d7adc 1afffffa e8bd8070 e1a01000 e3e00000 INFO/DEBUG(85): af9d7aec eafffff2 e1a01000 e3a00001 eaffffef INFO/DEBUG(85): stack: INFO/DEBUG(85): 599cccc8 599cccec
RS Summary: Ausblick
• GPU Beschleunigung
• Vereinfachung der RS APIs mit Android 4
• Dokumentation & Tools mit Android 4
• Portabilität und Emulator-Unterstützung
RS Summary: Infos & Links
• http://marakana.com/forums/android/general/381.html
• http://graphics-geek.blogspot.com/
• http://blog.iangclifton.com/2011/08/24/renderscript-101-
part-2-renderscript-interaction/
• http://events.linuxfoundation.org/slides/2011/lfcs/
lfcs2011_llvm_liao.pdf
• http://code.google.com/p/renderscript-examples/
• http://github.com/dhelleberg/RenderScriptDemos
RS Summary: Infos & Links http://bit.ly/mtc2011-dh
DANKE!