ES20Log

 最近、自分が思いっきり専門用語を使える相手とお話する機会があり、そのときは非常に楽しい時間をすごせました。
そのなかで、いろいろパフォーマンスに関する質問や、それらを表示出来ないのかと言われましたが、準備していなかったため応えることができませんでした。
 自分が、printfデバッグやinstrumentsなどに頼っていて、本来必須である画面にログやら色々表示する機能を用意してないことを思い出す機会となりました。
 最近はbullet physicsをいじりまくってる都合もあり、そのなかにあるGLDebugDrawがプリミティブとして十分な機能を持ってるのはわかっていましたが、いかんせんES2.0では使えない内容だったので、自分で色々書き換え、使えるようにしたのが、以下です。

https://gist.github.com/709639

これを使うことで以下のようにログ出力もどきを書くことができます。
また、fpsなどの画面出力は直接呼び出して描くなどできるようになります。

/* ES20DebugFont.h */
#import <Foundation/Foundation.h>

#ifdef __cplusplus
extern "C" {
#endif
	
void ES20LogWithString( NSString *s );
void ES20LogDraw();
void ES20LogClear();

#define ES20Log( ... ) ES20LogWithString( [NSString stringWithFormat:__VA_ARGS__] )	
	
#ifdef __cplusplus
}
#endif
/* ES20DebugFont.mm */
#include "ES20Log.h"
#include "ES20DebugFont.h"

static NSMutableArray *mArray = nil;

void ES20LogWithString( NSString *s )
{
	if ( mArray == nil )
		mArray = [[NSMutableArray alloc] init];
	int linesheight = ES20DebugScreenHeight() / ES20DebugFontHeight();
	[mArray addObject:s];
	while ( [mArray count] > linesheight) {
		[mArray removeObjectAtIndex:0];
	}
}

void ES20LogDraw()
{
	for ( int i = 0; i < [mArray count]; ++i) {
		ES20DebugDrawString(0, i*16+16, [[mArray objectAtIndex:i] UTF8String]);
	}
}

void ES20LogClear()
{
	[mArray removeAllObjects];
}