2011年4月14日木曜日

Garaxy S でOpenGLを使おうとしたらegl_bad_surfaceで怒られる罠

タイトルの通りですが、学生のGaraxySでOpenGLのテストをしてもらおうとしたら、画面の背景色クリアすら行かない状態。

よーくログを見ると、EGL_BAD_SURFACEとか言われてるわけです。

で、調べてみてもよくわからないんですよね。 これまた日本語で見つかる記事は無いし。
読めない英語を頑張って読んでいたら、大分前にこんなのが

ようするに、OpenGLの初期化の段階で

  int[] spec = new int[] {
   EGL10.EGL_RED_SIZE, 5, //赤
   EGL10.EGL_GREEN_SIZE, 5, //青
   EGL10.EGL_BLUE_SIZE, 5, //緑
   EGL10.EGL_DEPTH_SIZE, 1, //深度
   EGL10.EGL_NONE
  };
  EGLConfig[] configs = new EGLConfig[1];
  egl.eglChooseConfig(display, spec, configs, 1, new int[1]);

ってやってる、このRGBのbit指定がダメだ。と。
エミュレータはそこらへんなんか適当なのになぁ。へ・・・へぇーーー。

でも、そのビット指定を外すと

  int[] spec = new int[] {
   EGL10.EGL_NONE
  };

こんな情けない配列になりますけど。 良いですか? 良いんです!!!

でも、こんなんで悩んでる人は今はあまりいないっぽい。 多分だけど、みんなGLSurfaceViewの恩恵に預っているのだろう。

じゃぁなんでGLSurfaceView使わないかって? だってあのGLThreadってFPS指定できないでしょ。多分。

あと、描画メソッドの中で更新もしなきゃならなさそうだし(別スレッドでやる方法もあるんだろうけど、synchronizedで同期とるとかなんか嫌。)
更新→描画→更新 のちゃんとしたゲームループがほしいんだあ。

0 件のコメント:

コメントを投稿