SurfaceTextureレンダラ ( 頂点バッファオブジェクトの利用 )



SurfaceTexture に出力した画像を、画面に描画する方法を解説します。

前項「SurfaceTextureレンダラ ( 連続画像を画面に描画 )」で作成したSurfaceTextureレンダラのGLESの描画処理は、頂点配列を用いた描画処理でした。
本項では、SurfaceTextureレンダラのGLESの描画処理を、頂点バッファオブジェクトを用いた描画処理に変更します。

解説

頂点配列を用いた描画処理では、glDrawArrays の呼び出しのたびに、頂点データが、クライアントメモリからグラフィックスメモリへコピーされます。

頂点バッファオブジェクト ( Vertex Buffer Object : VBO ) を用いた描画処理では、頂点データを、事前にクライアントメモリからグラフィックスメモリにコピーしておき、glDrawArrays の呼び出しのときには、コピー済みの頂点データを用いて描画します。

頂点バッファオブジェクト ( Vertex Buffer Object : VBO ) を用いた描画処理は、頂点配列を用いた描画処理よりも高速に描画されます。

前項に対する処理の変更は以下です。

実装

アプリの仕様

仕様に関しては、前項と本項は変わりません。

プロジェクトを開く

SurfaceTextureレンダラ ( 連続画像を画面に描画 )」で作成したプロジェクトを開きます。

クラスメンバー変数の追加

「SurfaceTextureRenderer」クラスのメンバーに、頂点バッファオブジェクトIDの変数を追加します。

onSurfaceCreated関数の変更

「SurfaceTextureRenderer」クラスのonSurfaceCreated関数に、頂点バッファオブジェクトの作成、頂点データをクライアントメモリからグラフィックスメモリにコピーする処理を記述します。

onDrawFrame関数の変更

「SurfaceTextureRenderer」クラスのonDrawFrame関数のGLESの描画処理を、頂点バッファオブジェクトを用いた描画処理に変更します。



リビルドし、エラー、警告がないことを確認します。

実行

動作に関しては、前項と本項は変わりません。
(描画処理が早くなりますが、体感できるほどではありません。)

Android端末にて、動作確認。



アプリを起動すると、メインアクティビティが表示されます。
背景色は、灰色。
0.1秒(100ミリ秒)ごとに、矩形と円が、ランダムな色、位置、大きさで表示されます。

ダウンロード

サンプルコード

github.com上のリポジトリページ

関連ページ

SurfaceTextureレンダラ ( 画像を1度だけ画面に描画 )

SurfaceTextureレンダラ ( 連続画像を画面に描画 )

SurfaceTextureレンダラ ( 頂点バッファオブジェクトの利用 ) - 本ページ