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・・・・休日の時間を返してくれ・・・・