SurfaceTextureレンダラ ( 頂点バッファオブジェクトの利用 )
SurfaceTexture に出力した画像を、画面に描画する方法を解説します。
前項「SurfaceTextureレンダラ ( 連続画像を画面に描画 )」で作成したSurfaceTextureレンダラのGLESの描画処理は、頂点配列を用いた描画処理でした。
本項では、SurfaceTextureレンダラのGLESの描画処理を、頂点バッファオブジェクトを用いた描画処理に変更します。
解説
頂点配列を用いた描画処理では、glDrawArrays の呼び出しのたびに、頂点データが、クライアントメモリからグラフィックスメモリへコピーされます。
頂点バッファオブジェクト ( Vertex Buffer Object : VBO ) を用いた描画処理では、頂点データを、事前にクライアントメモリからグラフィックスメモリにコピーしておき、glDrawArrays
の呼び出しのときには、コピー済みの頂点データを用いて描画します。
頂点バッファオブジェクト ( Vertex Buffer Object : VBO ) を用いた描画処理は、頂点配列を用いた描画処理よりも高速に描画されます。
前項に対する処理の変更は以下です。
- 「SurfaceTextureRenderer」クラスのonDrawFrame関数のGLESの描画処理を、頂点バッファオブジェクトを用いた描画処理に変更します。
- 「SurfaceTextureRenderer」クラスのonSurfaceCreated関数に、頂点バッファオブジェクトの作成、頂点データをクライアントメモリからグラフィックスメモリにコピーする処理を記述します。
- 「SurfaceTextureRenderer」クラスのメンバーに、頂点バッファオブジェクトIDの変数を追加します。
実装
アプリの仕様
仕様に関しては、前項と本項は変わりません。
- アプリを起動すると、メインアクティビティが表示される。
- 背景色は、灰色。
- 0.1秒(100ミリ秒)ごとに、矩形と円が、ランダムな色、位置、大きさで表示される。
プロジェクトを開く
「SurfaceTextureレンダラ ( 連続画像を画面に描画 )」で作成したプロジェクトを開きます。
クラスメンバー変数の追加
「SurfaceTextureRenderer」クラスのメンバーに、頂点バッファオブジェクトIDの変数を追加します。
onSurfaceCreated関数の変更
「SurfaceTextureRenderer」クラスのonSurfaceCreated関数に、頂点バッファオブジェクトの作成、頂点データをクライアントメモリからグラフィックスメモリにコピーする処理を記述します。
onDrawFrame関数の変更
「SurfaceTextureRenderer」クラスのonDrawFrame関数のGLESの描画処理を、頂点バッファオブジェクトを用いた描画処理に変更します。
リビルドし、エラー、警告がないことを確認します。
実行
動作に関しては、前項と本項は変わりません。
(描画処理が早くなりますが、体感できるほどではありません。)
Android端末にて、動作確認。
アプリを起動すると、メインアクティビティが表示されます。
背景色は、灰色。
0.1秒(100ミリ秒)ごとに、矩形と円が、ランダムな色、位置、大きさで表示されます。
ダウンロード
関連ページ
SurfaceTextureレンダラ ( 画像を1度だけ画面に描画 )
SurfaceTextureレンダラ ( 連続画像を画面に描画 )
SurfaceTextureレンダラ ( 頂点バッファオブジェクトの利用 ) - 本ページ