GLSurfaceViewでハマったこと

Android SDK 1.5から GLSurfaceViewが使えるようになり、
AndroidでOpneGLを使う場合はこれが推薦されているらしい


今まではSurfaceViewを利用して自分で描画用のメインループを
作ったりしていたけれど、GLSurfaceViewでは、
作成する必要はなく、onDrawFrameが定期的に呼ばれるように
なっており、基盤部分を作成する手間が省けるようになっています


ということで、早速試してみました


ByteBuffer.allocateDirectで、四角形用のメモリを確保し
gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 4,
GL10.GL_UNSIGNED_SHORT, indexBuffer)で描画。
ここまでは難なくできました


次にgl.glDrawArrays(GL10.GL_TRIANGLES, 0, 4);で描画を
試してみたところ、OutOfBoundsのエラーが発生!
ちゃんと、ByteBuffer.allocateDirect(vertices.length * 4);
として、頂点座標分のデータを確保しているにもかかわらず
データが足りないと言われる。


ちなみに、allocateDirectで、本来必要分よりも多めに
メモリを確保して描画すると、なぜか三角形だけれど
表示することができたが、納得がいかない


このよく分からない挙動の調査のために、かなりの時間をかけて
しまったけれど、まったく原因がつかめませんでした


途中、発狂しそうになりながら、初期化パラメータを
変更したりしたけれど、一向に解決する気配がなかった。。


ということで、GLSurfaceViewは使わず、今まで通り
しばらくはSurfaceViewを使っていこうと思います


Android・・・・休日の時間を返してくれ・・・・