OpenGL Anbindung

Sascha Henke, Peer Wagner

Das Native Development Kit

Es gibt bereits seit der frühen Version 1.5 des Android-Systems eine elegante Möglichkeit OpenGL oder auch andere Performance kritische Applikationsteile zu programmieren. Dies geschah und geschieht teilweise immer noch mit dem Native Development Kit1 (NDK), welches ebenfalls von Google zur Entwicklung bereitgestellt wird. Es ist allerdings nicht möglich mit dem NDK vollständige Applikationen zu entwickeln, sondern es dient lediglich als Erweiterung zum Android-SDK. Die Anbindung erfolgt dabei über das Java Native Interface2, kurz JNI.

Die Applikationen lassen sich, wie der Name schon vermuten lässt, in C oder auch C++ schreiben und haben sogar durch verschiedene Header Zugriff auf Hardware wie die Kamera oder die Soundausgabe. Es wird jedoch davon abgeraten Anwendungen nur in nativem Code zu schreiben weil einem die Sprache C besser gefällt, da sich hierbei zum Beispiel eine erhöhte Gefahr von Speicherzugriffsfehlern ergeben oder auch die Sandbox in der die Applikationen immer laufen kompromittieren lassen.

Das NDK eigent sich somit für Operationen die nicht zu viel Speicher allokieren und stellt daher eine gute Erweiterung für die Entwicklung von Applikationen bereit auch wenn sich manche Dinge dadurch kaum vereinfachen oder gar umgehen lassen.

Java-Bindings

Mit der Android-Version 2.2 (Froyo) gibt es neuerdings außer dem NDK auch Java-Bindings um OpenGL ES 2.0 zu verwenden. Diese sind jedoch noch im Aufbau und stellen keine vollständige Implementation der OpenGL ES 2.0 Schnittstelle bereit, so dass man hierauf nur zurückgreifen sollte wenn man sich sicher ist, dass man die nicht implementierte Funktionalität in keinem Fall benötigt. Mit dem Erscheinen neuerer Android-Versionen werden jedoch die Bindings immer weiter vervollständigt, so dass mit einer der kommenden Versionen eventuell keine Programmierung mit dem NDK mehr nötig ist um aufwendige Spielegrafiken in eine Applikation einzubauen.

Da wir jedoch in den Anfängen schon an die Grenzen der damaligen Bindings gestoßen waren haben wir unsere Augmented Reality komplett über das NDK programmiert. Das NDK hat außerdem den Vorteil der Wiederverwendbarkeit von Code gebracht, denn der OpenGL-Code ist wie in den vorigen Kapiteln beschrieben fast Plattformunabhängig.


1 http://developer.android.com/sdk/ndk/overview.html

2 http://java.sun.com/docs/books/jni/


Page last modified on March 21, 2011, at 07:10 PM