おおお、動いた。色々苦労したが動いたぞー!
ファイル名の大文字、小文字が異なるところや、ファイルパスの区切り「/」「¥」「\」の違いなんかをうまく吸収するのに手間取ったけど綺麗に動いてる。しかも40FPSでてるな。同じCocos上で動いているのにもかかわらず、えらく動作速度が異なる。
・WindowsでCore i7 3500MHz で20FPS
・Mac book Air Core i7 2200MHzで40FPS
不思議だなぁ、Windows版のCocosが最適化されてなさすぎるのだろうか。
改修に必要だったポイントをいくつかメモ
・64ビット対応
ポインタが32bitから64bitに拡張されているので、引数にSint32 val = (Sint32)&Data;みたいなやや強引な渡し方でアドレスを渡しているところで辻褄が合わなくなってる。アドレスが64bitなので引数の32bit幅ではキャストできない。なんとなく覚えてるけど、1つの関数でなんでも受け取れる仕組みにしたところがこういうところで問題を起こす。昔からこういう書き方はよくない、って言われてたところだな。
・ARGBマクロが64bitに対応できてない
#define ARGB(a , b , c , d ) ((a<<24)|(r<<16)|(g<<8)|(b<<0))
Uint32 argb = ARGB(0xff,0xff,0xff,0xff);
こんな感じのマクロで値を生成する場合、渡されてくる値がそもそも64bit長のものである可能性があるので、それを32bit長の変数に入れられなくなってる。
■Cocosのキーボーのキーコード
#define KEY_RIGHT Cocos23::KeyCode::Key_Right;
Sint32 test[256];
test[ KEY_RIGHT ] = 0;
まず、上記の場合はKeyCodeをTest配列の添字にすることができなかった。
なので、enumにすることで、添字化することができた。
enum {
KEY_RIGHT = Cocos23::KeyCode::Key_Right;
}
これはWindowsではうまく行った。しかしMacでコンパイルするとうまくいかなかった。そもそも、enumに自動でキャストしてくれないのである。
enum {
KEY_RIGHT = (Sint32)Cocos23::KeyCode::Key_Right;
}
だから、こんな感じで明示的にキャストしてやる必要があった。
ファイル名の大文字、小文字が異なるところや、ファイルパスの区切り「/」「¥」「\」の違いなんかをうまく吸収するのに手間取ったけど綺麗に動いてる。しかも40FPSでてるな。同じCocos上で動いているのにもかかわらず、えらく動作速度が異なる。
・WindowsでCore i7 3500MHz で20FPS
・Mac book Air Core i7 2200MHzで40FPS
不思議だなぁ、Windows版のCocosが最適化されてなさすぎるのだろうか。
改修に必要だったポイントをいくつかメモ
・64ビット対応
ポインタが32bitから64bitに拡張されているので、引数にSint32 val = (Sint32)&Data;みたいなやや強引な渡し方でアドレスを渡しているところで辻褄が合わなくなってる。アドレスが64bitなので引数の32bit幅ではキャストできない。なんとなく覚えてるけど、1つの関数でなんでも受け取れる仕組みにしたところがこういうところで問題を起こす。昔からこういう書き方はよくない、って言われてたところだな。
・ARGBマクロが64bitに対応できてない
#define ARGB(a , b , c , d ) ((a<<24)|(r<<16)|(g<<8)|(b<<0))
Uint32 argb = ARGB(0xff,0xff,0xff,0xff);
こんな感じのマクロで値を生成する場合、渡されてくる値がそもそも64bit長のものである可能性があるので、それを32bit長の変数に入れられなくなってる。
■Cocosのキーボーのキーコード
#define KEY_RIGHT Cocos23::KeyCode::Key_Right;
Sint32 test[256];
test[ KEY_RIGHT ] = 0;
まず、上記の場合はKeyCodeをTest配列の添字にすることができなかった。
なので、enumにすることで、添字化することができた。
enum {
KEY_RIGHT = Cocos23::KeyCode::Key_Right;
}
これはWindowsではうまく行った。しかしMacでコンパイルするとうまくいかなかった。そもそも、enumに自動でキャストしてくれないのである。
enum {
KEY_RIGHT = (Sint32)Cocos23::KeyCode::Key_Right;
}
だから、こんな感じで明示的にキャストしてやる必要があった。
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。