- 追加された行はこの色です。
- 削除された行はこの色です。
* 実装メモ [#nc172af3]
#contents
** 2011/03/06 iOSのエントリーポイント [#x1600cb2]
こんな感じかな。
#code(c,){{
int main()
{
// Macと同じように引数解釈
// ...
// C++のコードに移動
return mainC( ... );
}
int mainC( Arg aArg )
{
// xmainスレッド作成
// ...
// UIMain実行
// ...
// xmainスレッドの完了待ち
// ...
// 終了
}
int xmainThreadEntryPoint( Arg* aArgPtr )
{
// 起動完了待ち
waitSignal(); // UIMainからSignalが来るのを待つ
// ここにくるのはDidFinishedLaunchのタイミング
// xmain起動
int result = 0;
{
// Application作成
Application app( *aArgPtr );
// xmain呼び出し
result = xmain( app );
}
// ここにくるのはapplicationWillTerminate
// UIMainに終了したことを伝達
signalToUIMain();
// 何も待たずスレッド終了
return result;
}
}}
** 2011/03/05 iOS対応どうやろう [#fd178c92]
元々WinとMacのクロスプラットフォームで考えていましたが
流行のiOSも対応させてみるのはおもしろそうと思いちょっと考えてみました。
iOS対応となると一番ネックなのがイベントドリブン式になるということ。
didFinishLaunchingWithOptions
applicationWillTerminate
applicationWillResignActive
applicationDidBecomeActive
初期化・後始末・アクティブ化・非アクティブ化のイベント。
後は毎秒60回のイベントが流れてくると考えれば良さそうです。
…という要件からメインループを書いてみる。
#code(c,){{
int xmain()
{
Application app;
bool doExit = false;
while ( !doExit )
{
Event event = app.eventReceive();
switch( event )
{
case EventKind_Quit:
doExit = true;
break;
case EventKind_BecomeActive:
break;
case EventKind_ResignActive:
break;
case EventKind_UpdateFrame:
update();
draw();
break;
default:
break;
}
}
}
}}
なんとかいけるかな?