コンテンツへスキップ

圧縮テクスチャ(ETC1)を作る

Androidがサポートしているテクスチャフォーマット"ETC1"を使って画像を圧縮&Wifi転送する手法について検討しています。

 

画像データ展開がネック

パフォーマンス向上を図るべくログと睨めっこしていると、早くしたい部分というのが見えてきます。そこを改善すれば早くなるハズですが、実際に改良を加えてみると今度は別な箇所がネックに・・・ということがあります。

ツー ルでは画像データを延々と展開&表示を繰り返す処理があり、処理のほとんどがそれです。なんとか速度を上げたいのでOpenGLを使ってGPUに処理を丸 投げしてしまおうという目論見でした。が、今度はVRAMへの画像転送処理(JPEGの展開が重い)がネックになって逆にスピードダウンしてしまいました(メインメモリとVRAMを 共有している関係もあるのかも)

 

処理内容

現状の大まかな処理です。

  1. PCから画像データ(JPEG)を受け取る
  2. 受け取った画像データをメインメモリに展開
  3. 展開した画像をテクスチャとしてVRAMへ転送
  4. 画面の表示

とっても迂遠な感じです。この中で2,3が特に処理時間を要しています。
JPEGなんかで送らずに生(そのままメモリに展開できるような)データで受け取れば早くなるかとも思いましたが、結果としてはネットワーク帯域が一杯一杯になってしまい頓挫。

 

次なる目論見

圧縮テクスチャというものがありました。上記3ではVRAMへでかい生データを転送していますが、ここを圧縮した状態で送ってやることが出来るそうです(展開はGPUがやってくれる)。

ということは、PC側で画像を圧縮テクスチャとして用意することが出来れば処理2,3を大幅に短縮出来そうです。

リアルタイムで作れるかはこれからですが、作成ツールがあったので試してみました。

arm_texture_tool

サンプル画像で試したところ、759kbyte(JPEG)が385kbyteになっていました。ぱっと見では劣化も気になりません。
ただ、ちょっと処理時間がかかってたのが心配ですが・・・

テストプログラムを作ってAndroid上で試した感じでは、表示は問題なさそうでした。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください