coding, photo, plant and demo

*Androidで直接Textureに書き込む方法

android tech 20120315 223146
glTexSubImage2Dが遅い等の諸事情によりCPUから直接Textureを書き換えたいときの技を教えてもらった。書いたのはmozillaの開発者。

using direct textures on android
http://snorp.net/2011/12/16/android-direct-texture.html

本来アプリケーションでは使えないGraphicBufferをdlopen/dlsymで無理やり使うという荒業だ。互換性などお構いなしである。
それで得たバッファをEGLのeglCreateImageKHRで生成したEGLImageを経由して通常のテクスチャにアタッチする。EGLはOpenGL/ESをネイティブプラットフォームと繋ぐための低レベルAPI。普通は使わない(と思う)。

Android標準のWebViewでもテクスチャの書き換えにEGLは活用されているようだ。
https://github.com/android/platform_external_webkit/blob/master/Source/WebCore/platform/graphics/android/GLUtils.cpp
https://github.com/android/platform_external_webkit/blob/master/Source/WebCore/platform/graphics/android/TransferQueue.cpp


などとandroidのexternal/webkitのmasterのレポジトリを見ていたら、
Add features to support Ganesh in the Android browser
https://github.com/android/platform_external_webkit/commit/c7e578330aece3c556ef205365c24676687223e2
なんてコミットを見つけた。むむ、今までCPUで描いていたテクスチャへのレンダリングをGPUで行うようだ。

GaneshというのはSkiaのGPUレンダリングのプロジェクト名らしい。日本語で言うと ガネーシャ 。像の頭を持ったヒンドゥーの神か。もしSkGpuDeviceを触ることがあるならKula Shakerかゴアトランスを聞きながら作業すると、インドの御加護があるかもしれない。


http://www.youtube.com/watch?v=2bYj2o7y4rk