GLTextureViewを公開しました
Android 4.0(API Level 14)からTextureViewというViewが登場し、OpenGL ESの応用範囲が格段に広くなりましたが、GLSurfaceViewに相当する補助クラスが未だに登場していません。
Google的には必要ないという考えかもしれませんが、SurfaceViewよりもTextureViewでOpenGL ESを扱ったほうが非常に楽なため、俺俺GLTextureViewクラスを公開しました。
詳細はREADME.mdにも記述されています。
GLSurfaceViewとの相違点
使い方はGLSurfaceViewとほぼ変わりありません。 ですが、おおまかに次の点が異なります。
- リソース解放用にonSurfaceDestroy()を追加した
- requestRender()の設計が異なる
- 初期化用のメソッド名が異なる
- 基本的にEnumを定義し、それをメソッドへ渡すようにしています
サンプルコード
- githubには次のサンプルがコミットされています
例えば、GLTextureViewでOpenGL ES 2.0を初期化し、レンダリングスレッドを作成するコードは次のようになります。
public class SimpleGL20Activity extends Activity implements Renderer { static final String TAG = SimpleGL20Activity.class.getSimpleName(); GLTextureView glTextureView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); glTextureView = new GLTextureView(this); // Setup GLTextureView { glTextureView.setVersion(GLESVersion.OpenGLES20); // set OpenGL Version // glTextureView.setSurfaceSpec(SurfaceColorSpec.RGBA8, true, false); // Default RGBA8 depth(true) stencil(false) // glTextureView.setRenderingThreadType(RenderingThreadType.BackgroundThread); // Default BackgroundThread glTextureView.setRenderer(this); } setContentView(glTextureView); } @Override protected void onPause() { glTextureView.onPause(); super.onPause(); } @Override protected void onResume() { super.onResume(); glTextureView.onResume(); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { Log.d(TAG, "onSurfaceCreated"); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { Log.d(TAG, String.format("onSurfaceChanged(%d x %d)", width, height)); } @Override public void onDrawFrame(GL10 gl) { GLES20.glClearColor(0, (float) Math.random(), (float) Math.random(), 1.0f); GLES20.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); } @Override public void onSurfaceDestroyed(GL10 gl) { Log.d(TAG, String.format("onSurfaceDestroyed")); } }
- 作者: 日経ソフトウェア
- 出版社/メーカー: 日経BP社
- 発売日: 2013/02/23
- メディア: 雑誌
- クリック: 2回
- この商品を含むブログを見る
- 作者: 山下武志
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/07/21
- メディア: 大型本
- 購入: 3人 クリック: 71回
- この商品を含むブログ (8件) を見る
日経ソフトウエア4月号にTextureViewの記事が掲載されました
「TextureViewで作ろう!」という記事が掲載されました
日経ソフトウエア 2013年 4月号に私が執筆したTextureViewを使った記事が掲載されました。
記事内容
Android 4.0(ICS)から追加された"TextureView"というViewの簡単な解説記事です。
API自体は一年以上前に公開されたため多少古いですが、現在までほとんど日本語の情報がないため、少しでも参考になればと思います。
TextureViewはSurfaceViewの強化版という認識で問題ありませんが、内部処理は全く違います。
今回の記事はその違いを説明するために、カメラを使った簡単なアプリを作成しました。
アプリ内容
端末のシステムレイヤー上に常にカメラ映像をオーバーレイします。
アプリを起動するとServiceを立ちあげ、Activity自体はすぐにfinish()します。
ServiceからTextureViewを作成し、システムレイヤーに登録してカメラのプレビューを行います。
- TextureViewを使った効果で、端末負荷やフレームレートが飛躍的に向上しています
- オーバーレイするカメラ映像のα値を自由に設定出来ます
- もともとmatsumoさんが作成した光学迷彩というAndroidアプリという似たアプリがあります
- 操作は全てステータスバーで行います
インストール
アプリ本体はGoogle Playにて公開中です。
- こちらからインストールしてください
- ソースコードからビルドすることも可能です
ソースコード全文公開
ソースコードはgithubで公開中です。
よかったら買ってください
もし気になるようだったら買ってもらえると嬉しいです。
- 作者: 日経ソフトウェア
- 出版社/メーカー: 日経BP社
- 発売日: 2013/02/23
- メディア: 雑誌
- クリック: 2回
- この商品を含むブログを見る
JenkinsにBGMを付ける
弊社Jenkinsビルド開始時にFF5の戦闘音楽 -> ビルド成功でファンファーレという流れをつけた
— 川峠さん (@eaglesakura) 2013年2月13日
Jenkinsを使った開発を楽しくしようとして、BGMをつけたら案外話題になったからそのまとめ。
事の始まり
- iOSアプリの開発のために、余っていたMac Book AirにJenkinsを導入することに
- せっかくMBAだから、サーバー側のJenkinsには出来ないことをやろうと思った
導入方法
導入というほど大仰なことは実は行ってなくて、かなり適当な方法を取っています。
Macのターミナルには"afplay"という音源再生のコマンドがあるので、それを組み合わせるだけです。
- 鳴らしたい音をmp3でJenkinsを導入したMBAに保存
- もともとJenkinsのビルドはシェルを実行する形式だったので、シェルに直接サウンドを鳴らすコマンドを記述する
スクリプト記述例
- ここではci-buildというシェルスクリプトをgitのrootに用意して、Jenkinsからそのスクリプトを蹴っている
- Macのターミナルの場合"&"を使うとビルドとサウンドを同時に行える
- afplayだけを使うと、ビルド完了後BGMを再生したり、BGM再生後にビルドを開始するという悲しいことになる
- "wait"を使うと、ビルド実行とBGM再生の両方が終わるのを待つ(らしい)
- 実際にはビルドが5分以上かかるから、BGMが先に終わることはない
- ビルド完了後の効果音処理についてはこちらのブログが詳しいです
------------------------------------------------------------------------------------------------
./ci-build & afplay ~/sound.jenkins/build.mp3
# ビルド実行待ちを行う
wait
if [ $? -ne 0 ]; then
echo "build failed…"
exit 1
fi
------------------------------------------------------------------------------------------------
効能
- ビルド開始やテスト開始等のJenkinsの動きに応じて好きなBGMを付けられる
- BGMとSEのお陰で「どのプロジェクト」が「どのようなビルド結果になったのか」を職場の全員にブロードキャストできる
- Jenkinsを導入する気になる
- Jenkinsが頑張ってる感が出る
- テストも作る気になる
- FF楽曲はやる気が出る
- コーディングが楽しくなる!!
難点
- BGMとSEのお陰でテストが壊れるとDISられる
というわけでシェルを使うだけのとても簡単な方法でBGMを付けられるので、余ってるMacがあってJenkinsを導入してる人はオススメです。
お一人様から楽しめます。