2010年6月28日月曜日

NexusOne, Droidでテクスチャがでない問題




「魔王なんて!」発売後、かなり悩まされた問題があります。特定の端末で「テクスチャが全く表示されない」という現象です。発生端末は海外の端末全てのようで、主にNexusOne, Droidで発生すると申告が来ていました。
(バグ修正にご協力頂いたGoogle Chris Pruettさん、kerieruさん、ありがとうございました。m(_ _)m)

まったく同じプログラムなのにどうしてこういうことが起きたかというと、OpenGLESの仕様が違うかららしいです。具体的には何が違うかというと、「2の累乗以外のテクスチャをサポートしているかどうか?」です。日本用の端末のDesireとXperiaはてきとうなサイズの画像ファイルを読み込んでも簡単にOpenGLのテクスチャとして使用できますが、海外の携帯は「2の累乗サイズ」でないと全く表示できません。

また、最後に悩まされたのが下記の関数です。これは海外の端末では全く機能しませんでした。


gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, tex.w, tex.h, 0, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, null);
gl.glTexSubImage2D(GL10.GL_TEXTURE_2D, 0, 0, 0, tex.w, tex.h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, bb);


どうもこの関数は引数にサイズを指定できるようで、こういう関数を使用してもいけないみたいです。うまくいったのは下記の関数をつかって2の累乗サイズの画像ファイルを読み込んだときだけでした。


GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);


この問題は実機テストがかなり大変なので、横着せずに2の累乗でテクスチャを用意するような実装を最初からした方が良さそうです。

0 件のコメント:

コメントを投稿