PSPにて
Re:PSPにて
>PSPではソフトでdoubleを計算しているのではないでしょうか。そのため劇的に遅くなっているのでは?
PSPはやったことがないので詳しくはないのですが、それはパフォーマンスに
大きな影響を与えそうですね。
# ftさん
変数で使用する型は勿論ですが、演算中の定数や数学ライブラリも float版を使うように
しないと doubleが混ざってしまいますので書き換えるのはなかなか大変かもしれません。
ちなみに -fshort-doubleコンパイルオプションも使えそうですが、使用するライブラリとの
整合性や可変引数での扱いがおかしくなりそうなので、避けた方がいいかもしれません。
Re:PSPにて
プログラミングについて勉強不足で申し訳ないのです。。。
まず最初にdoubleで宣言しているものをすべてfloatに変えたら動きませんでした。
いろいろ弄っていたのですが、
弾の座標を計算していると思われるshot.c中のshot_calc()の、
shot[n].bullet.x+=cos(shot[n].bullet.angle)*shot[n].bullet.spd;
shot[n].bullet.y+=sin(shot[n].bullet.angle)*shot[n].bullet.spd;
という個所を次のように、
shot[n].bullet.x+=cos((float)shot[n].bullet.angle)*shot[n].bullet.spd;
shot[n].bullet.y+=sin((float)shot[n].bullet[i].angle)*shot[n].bullet[i].spd;
そしてstruct.c中の
//弾に関する構造体
typedef struct{
//フラグ、種類、カウンタ、色、状態、少なくとも消さない時間、エフェクトの種類
int flag,knd,cnt,col,state,till,eff;
//座標、角度、速度、ベースの角度、一時記憶スピード
double x,y,angle,spd,base_angle[1],rem_spd[1];
}bullet_t;
という個所を次のように
//弾に関する構造体
typedef struct{
//フラグ、種類、カウンタ、色、状態、少なくとも消さない時間、エフェクトの種類
int flag,knd,cnt,col,state,till,eff;
//座標、角度、速度、ベースの角度、一時記憶スピード
float x,y,angle,spd,base_angle[1],rem_spd[1];
}bullet_t;
これらの箇所だけ変えたら、今度は弾の描画がなくなってしまいましたが、
処理落ちは確認されませんでした。
まず最初にdoubleで宣言しているものをすべてfloatに変えたら動きませんでした。
いろいろ弄っていたのですが、
弾の座標を計算していると思われるshot.c中のshot_calc()の、
shot[n].bullet.x+=cos(shot[n].bullet.angle)*shot[n].bullet.spd;
shot[n].bullet.y+=sin(shot[n].bullet.angle)*shot[n].bullet.spd;
という個所を次のように、
shot[n].bullet.x+=cos((float)shot[n].bullet.angle)*shot[n].bullet.spd;
shot[n].bullet.y+=sin((float)shot[n].bullet[i].angle)*shot[n].bullet[i].spd;
そしてstruct.c中の
//弾に関する構造体
typedef struct{
//フラグ、種類、カウンタ、色、状態、少なくとも消さない時間、エフェクトの種類
int flag,knd,cnt,col,state,till,eff;
//座標、角度、速度、ベースの角度、一時記憶スピード
double x,y,angle,spd,base_angle[1],rem_spd[1];
}bullet_t;
という個所を次のように
//弾に関する構造体
typedef struct{
//フラグ、種類、カウンタ、色、状態、少なくとも消さない時間、エフェクトの種類
int flag,knd,cnt,col,state,till,eff;
//座標、角度、速度、ベースの角度、一時記憶スピード
float x,y,angle,spd,base_angle[1],rem_spd[1];
}bullet_t;
これらの箇所だけ変えたら、今度は弾の描画がなくなってしまいましたが、
処理落ちは確認されませんでした。
Re:PSPにて
ちょっと調べたらこんなレスがありました
http://gameurawaza.me.land.to/test/read ... 814877/503
これが本当ならdouble=>floatは効果なさそうですね
単にグラフィック処理が追いつかないだけでしょうか
PSPみたいな組み込みに近いやつで処理速度求めるならライブラリ使わないでゴリゴリ書いた方がいいのかもしれません
http://gameurawaza.me.land.to/test/read ... 814877/503
これが本当ならdouble=>floatは効果なさそうですね
単にグラフィック処理が追いつかないだけでしょうか
PSPみたいな組み込みに近いやつで処理速度求めるならライブラリ使わないでゴリゴリ書いた方がいいのかもしれません
Re:PSPにて
そうですね。
doubleとfloatのコアの部分は差は無いかも知れませんが、double→float(計算)→doubleの変換が入っているだけでもロスはロスです。
floatとdoubleをそれぞれ百万回ループで計算速度の差を計測するなど実際に試して実験して見ましょう。なんとなく早くなった気がするってのが後々不幸の元です。正しいデータを取る事の手を抜くと自分にお返しがありますよ。
この手の浮動少数点系の貧弱なハードでは、全てfloatで計算をするのは当たり前としてint→floatやfloat→int変換がなるべく起きないように気をつけてください。この時間ロスも馬鹿に出来ません。
toyoさんも書かれているsinfなどの活用も忘れていはいけませんね。
doubleとfloatのコアの部分は差は無いかも知れませんが、double→float(計算)→doubleの変換が入っているだけでもロスはロスです。
floatとdoubleをそれぞれ百万回ループで計算速度の差を計測するなど実際に試して実験して見ましょう。なんとなく早くなった気がするってのが後々不幸の元です。正しいデータを取る事の手を抜くと自分にお返しがありますよ。
この手の浮動少数点系の貧弱なハードでは、全てfloatで計算をするのは当たり前としてint→floatやfloat→int変換がなるべく起きないように気をつけてください。この時間ロスも馬鹿に出来ません。
toyoさんも書かれているsinfなどの活用も忘れていはいけませんね。
Re:PSPにて
>>toyoさん
dxライブラリportableのサイト
ttp://dxlibp.sourceforge.jp/
のチュートリアルにて、「test.c」を作っていたので.cのままでやっております。
龍神録さんのC++のソースをほぼそのまま移行してたらエラーする箇所もいくつかありました。
あとdouble→floatに変えてみると動かなくなったり、途中で停止してしまうため、
もう一度最初からfloatというのを確認しながら、次はC++で組んでみたいと思います。
また調べていたら読み込んだ画像をPSPのvramに置くとかなんとかという事が書かれていましたが…
この辺はどのようにしたらいけるのか今のところイマイチです。
dxライブラリportableのサイト
ttp://dxlibp.sourceforge.jp/
のチュートリアルにて、「test.c」を作っていたので.cのままでやっております。
龍神録さんのC++のソースをほぼそのまま移行してたらエラーする箇所もいくつかありました。
あとdouble→floatに変えてみると動かなくなったり、途中で停止してしまうため、
もう一度最初からfloatというのを確認しながら、次はC++で組んでみたいと思います。
また調べていたら読み込んだ画像をPSPのvramに置くとかなんとかという事が書かれていましたが…
この辺はどのようにしたらいけるのか今のところイマイチです。