ETC1とGalaxy Nexus
AndroidのOpenGL ES実装はETC1をサポートするようになっています。
ETC1テクスチャは4x4のピクセルブロックを基本とした圧縮を行うため、利用するには次のような制限があります。
- 縦横のピクセル数が4の倍数であること
- GL_OES_compressed_ETC1_RGB8_textureエクステンション対応のGPUであること
この制限に従っていれば、Power Of Two(2のn乗)である必要はありません。
Galaxy NexusのGPUはスペック上はnpot(Non Power Of Two = 2のn乗以外)テクスチャも扱えますし、ETC1もサポートしています。
当然、次のコマンドも正常に行えますし、assertも通過します。
glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_ETC1_RGB8_OES, width, height, 0, image_bytes, image); assert(glGetError() == GL_NO_ERROR);
その状態でテクスチャをbindしてレンダリングすると、問答無用でアプリが落ちます。OpenGLは基本的にエラーが発生したらエラーをセットするだけのため、異常な動作だと思われます。
解決方法としては「npotのETC1を使わない」という点ですが、でっかい背景画像とかnpotのETC1を使いたい場所はそこそこあるので、他の端末で同様の不具合が起きないことを祈るのみです。
その他
回避方法、もしくは「ここが間違ってる」という指摘があったらコメントお願いしますm(__)m
- 作者: 山下武志
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/07/21
- メディア: 大型本
- 購入: 3人 クリック: 71回
- この商品を含むブログ (8件) を見る