圧縮テクスチャをリアルタイム生成する

次で詳しくと言いながら、まだパフォーマンスアップ目指してソースコードを弄っています。中々に手ごわいです・・・

やっている内容はPC側プログラムで以下の2の部分になります。

  1. Windowsアプリケーションのウィンドウをキャプチャする
  2. キャプチャした内容を圧縮テクスチャ(ETC1フォーマット)に変換
  3. Android端末へ送信

圧縮テクスチャをリアルタイムで作り、それでパラパラ漫画のように表示してしまおうという作戦でした。が、圧縮テクスチャを生成するのに結構な時間がかかっています。今使わせてもらっているのはrg-etc1という高速なライブラリですが、それでもまだ足りません。なにせ動画なので、秒間10フレームくらいは欲しい・・・。
残念ながら現状は1024*768サイズ(32bit)で200msecくらいかかります。処理の一部をSIMDに置き換えたりとチューンを続けていますが、100msecまで持っていくのは結構きつそうです。
(もともと300msec前後だったのをどうにか200msecまで縮めた)

また、今度はAndroid側のお話になりますが、圧縮テクスチャはGPUが展開処理を行います(と認識してます)。その為にJPEG等と違ってAndroidのCPUに負荷をかけずに色々と出来るに違いない・・・というのが当初の目論見でした。ある程度動作させてみて間違ってはいませんでしたが、テクスチャを使用する際にはGPUにテクスチャオブジェクトというものを作成します。これと実際にVRAMへ転送したテクスチャ画像を紐付けして管理しているようです。
今回の場合は動画にするつもりなので、画面更新の度にテクスチャを更新する必要があります。この更新処理が思ったより重いらしく、単純にVRAMへテクスチャ転送するだけの割にはCPUを使っているようです。
(テクスチャオブジェクトの生成は重い処理のようです)

ちょっと調べてみると、OpenGLにはテクスチャオブジェクトを破棄せず画像データだけを更新する処理が定義されていましたが、なんとETC1は未サポート。。。上手くいかないものです。

コメントを残す

メールアドレスが公開されることはありません。

This blog is kept spam free by WP-SpamFree.