描画できたのはいいのだけれど
凄い勢いで画面がちらつく。
GLSurfaceView.RendererのonDrawFrame()の中で
必要性があるときだけ再描画しているのだが
このonDrawFrame, 必ずバッファのスワップを行うらしい。
swapBuffersは自分で呼び出したいけど駄目なの?
ステンシルバッファがエミュレータで使えないのは諦めて描画周りの実装はじめ。
ついでにちゃんと確認はしてないけど
glBlendFuncSeparateOESもどうもエミュレータでは使えないっぽい。
GLSurfaceView.RendererクラスのonDrawFrameからjniの描画関数を呼び出して
画面描画できることが確認。
ステンシル使えないから見た目が変ですよ!
次はスレッド周りの実装とクリックイベントの取得かな。
ついでにちゃんと確認はしてないけど
glBlendFuncSeparateOESもどうもエミュレータでは使えないっぽい。
GLSurfaceView.RendererクラスのonDrawFrameからjniの描画関数を呼び出して
画面描画できることが確認。
ステンシル使えないから見た目が変ですよ!
次はスレッド周りの実装とクリックイベントの取得かな。
あのーGL何回やっても呼ばれない
無事100以上のcppファイルをビルドしたところで
java->cppファイルを読み込もうとしているのですが
その前のところで躓き中。
いきなりiOSプログラムの移植をするのではなく
jniのサンプルを元にjava->cのプログラムでGL描画をしようとしただけなのですが
IllegalArgumentExceptionが表示される。
setEGLConfigChooserに渡す引数がよろしくないらしい。
setEGLConfigChooser(r, g, b, a, depth, stencil);
なのですがこの引数が
8, 8, 8, 8, 16, 0
だと動くのに
8, 8, 8, 8, 24, 8
だと動かない。
英語圏のBBSにエミュレータではステンシルが使えないから諦めろって書かれてありました……。
……stencilが使えないと困るんだけどな。
今手元に実機がないのにどうしよう。
無事100以上のcppファイルをビルドしたところで
java->cppファイルを読み込もうとしているのですが
その前のところで躓き中。
いきなりiOSプログラムの移植をするのではなく
jniのサンプルを元にjava->cのプログラムでGL描画をしようとしただけなのですが
IllegalArgumentExceptionが表示される。
setEGLConfigChooserに渡す引数がよろしくないらしい。
setEGLConfigChooser(r, g, b, a, depth, stencil);
なのですがこの引数が
8, 8, 8, 8, 16, 0
だと動くのに
8, 8, 8, 8, 24, 8
だと動かない。
英語圏のBBSにエミュレータではステンシルが使えないから諦めろって書かれてありました……。
……stencilが使えないと困るんだけどな。
今手元に実機がないのにどうしよう。
外部ライブラリにlibzやlibPNGなどを使っているってことで
外部ライブラリのAndroid.mkの作成とライブラリのリンク。
普通のMakefileと同じで-lライブラリ名を書くのかと思いきや
OpenGL ES 1.xの方は
これでようやくcppファイルのビルドが終了。
……ndk-buildが遅い。100ちょっとのcppファイル数をビルドするのに凄い時間かかるよ。
外部ライブラリのAndroid.mkの作成とライブラリのリンク。
普通のMakefileと同じで-lライブラリ名を書くのかと思いきや
LOCAL_SHARED_LIBRARIES := Android.mkに記入したモジュール名でした。
OpenGL ES 1.xの方は
LOCAL_LDLIBS := -lGLESv1_CMでリンク。
これでようやくcppファイルのビルドが終了。
……ndk-buildが遅い。100ちょっとのcppファイル数をビルドするのに凄い時間かかるよ。
Android.mkはMakefileと似たような感じなので
一度ビルドができるようになれば後はソースを追加するだけ。
1フォルダ1Android.mkにしようかと思ったけど
元のファイルがかなり細かくフォルダ分けされていたので
1プロジェクト1Android.mkに変更。
外部ライブラリもビルドしないといけないようなのでやらないと。
次の問題はOpenGLです。
OpenGL ESの1.xを使う場合は
iOSのプログラムでOpenGL ES 1.x使用しているらしいのでAndroidもそれにあわせたのに
'glBindFramebufferOES'と'glBlendFuncSeparateOES'がないとエラーをはいてくる。
まさか使えないのかとglext.hの中身を見たら
それらの関数定義の前に
どうもGL_GLEXT_PROTOTYPESをdefineしてあげないとフレームバッファとかが使えないらしい。
一度ビルドができるようになれば後はソースを追加するだけ。
1フォルダ1Android.mkにしようかと思ったけど
元のファイルがかなり細かくフォルダ分けされていたので
1プロジェクト1Android.mkに変更。
外部ライブラリもビルドしないといけないようなのでやらないと。
次の問題はOpenGLです。
OpenGL ESの1.xを使う場合は
#include <GLES/gl.h>OpenGL ESの2.0を使う場合は
#include <GLES/glext.h>
#include <GLES2/gl2.h>をincludeしてやればいいらしい。
#include <GLES2/gl2ext.h>
iOSのプログラムでOpenGL ES 1.x使用しているらしいのでAndroidもそれにあわせたのに
'glBindFramebufferOES'と'glBlendFuncSeparateOES'がないとエラーをはいてくる。
まさか使えないのかとglext.hの中身を見たら
それらの関数定義の前に
#ifdef GL_GLEXT_PROTOTYPESの一文。
どうもGL_GLEXT_PROTOTYPESをdefineしてあげないとフレームバッファとかが使えないらしい。