2013年10月28日月曜日

SAMSUNGてめ~w (初代ギャラタブとかのテクスチャが表示されない場合)

今更で需要は少ないかもしれませんが、古い機種も対応される方向けに・・・

SAMSUNGのAndroid2.2系端末、初代ギャラタブとかですね。この頃の機種はOpenGLのドライバに悲しいバグが色々あるのですが、検索で見つからず難儀した事を思い出したので軽く。

テクスチャ絡みで、テクスチャに割り当てるIDを払いだしてもらえるメソッドがあります。

結論:
そのメソッドを使ってはいけません。
(なんてメソッドだったか調べるの面倒くさいので、各自でよろしくです)

何故か:
負の値が払い出される事がある。その値をそのままテクスチャのバインドに使うと、そのIDに割り当てたテクスチャは呼び出せない。

gl.glBindTexture(GL11.GL_TEXTURE_2D, id);
GLUtils.texImage2D(GL11.GL_TEXTURE_2D, 0, bmp, 0);

これで id<0 だと、描画時にもう一回バインドしても何も描画されません。
ま、gl.glBindTexture()が負の値を受け付けないというか、0以下はバインド解除なんで当然なんですけれど。
ちなみに払い出しID値の法則性は不明。他のメーカーの端末とは異なり意味不明なバラバラな値。なんか擬似乱数っぽい感じでした。

解決策:
自分で適当なカウンタを用意して、それを勝手にIDとして使います。
IDはかぶらなければ、特に問題なかったです。OpenGLって、結構てきとうな作りですね。


0 件のコメント:

コメントを投稿