Nanashi-softプログラマ専用AndroidでOpenGL ES 2.0プログラミング


◇AndroidでOpenGL ES 2.0プログラミング -デバッグ表示-

実機デバッグができるようになったので,デバッガーを使いたいと思います
Android SDKには DDMSというツールが付いていて,色々な情報が見られます

ちなみに,Android SDKでは,printfや System.out.printlnではコンソール出力できません

Eclipseを起動して,右上にあるパースペクティブ表示を DDMSに切り替えます
表示されていない場合は,左にパースペクティブを開くアイコンがあるので,それをクリックして DDMSを選択する

すると,下の LogCat欄に『java.lang.NoSuchMethodError: com.android.ddmuilib.logcat.LogPanel.setLogCatViewInterface~』みたいなエラーが出てい る場合があります
これを直すには,一旦 Eclipseを終了させて,コマンドラインから
cd C:\user\eclipse
eclipse.exe -clean
すれば直ります
数分して終わらない場合は,パソコンを1回再起動して試してみるとできます(1時間経っても終わらなかったので,再起動してみたらすぐ終わった)


●デバッグ表示方法(Java)
import android.util.*;
を追加していなければ追加する

ソース中に,
Log.i("debug", "デバッグ表示");
のように記述して実行すると,ログ欄に表示されます

例)描画時間の測定
	public void onDrawFrame(GL10 gl) {
		long t1=System.currentTimeMillis();
		NDKonDrawFrame();
		Log.d("debug_j", ""+(System.currentTimeMillis()-t1));
	}

●デバッグ表示方法(C言語)
jniフォルダの下の Android.mkファイルを編集し,LOCAL_LDLIBSに -llogを追加
LOCAL_LDLIBS := -llog -lGLESv2 -L/cygdrive/c/android-ndk/platforms/android-8/arch-arm/usr/lib
ヘッダーを追加
#include <android/log.h>
ソース中にログプリントを記述
	__android_log_print(ANDROID_LOG_DEBUG, "debug_c", "デバッグ表示");
例)描画時間の測定
void Java_jp_sgca8_sgcRenderer_NDKonDrawFrame(JNIEnv* env)
{
	timespec t1;
	clock_gettime(CLOCK_REALTIME, &t1);
~ココに描画処理~
	timespec t2;
	clock_gettime(CLOCK_REALTIME, &t2);
	__android_log_print(ANDROID_LOG_DEBUG, "debug_c", "%d", (t2.tv_sec-t1.tv_sec)*1000+(t2.tv_nsec-t1.tv_nsec)/1000000);
}
これでエラー時に勘に頼る部分が激減します('-'*)


TOPプログラマ 専用AndroidでOpenGL ES 2.0プログラミング