+にゃんにゃんにゃんこの演習+ 2010年08月

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

続・DXライブラリ高速化

前回の記事のチャレンジの結果です。

結論から言うと、
かなり高速化できました!


60fpsを維持して描画できる弾の数が1000個から6000個に!



やったことは以下。



・SetDrawBrightのエラーチェック、変数のキャスト、一時オブジェクトの生成等をすべてカット

・自作のゲーム内で、色情報はRGBAの構造体で持ってたので、それをそのまま渡すように

・内部でRGBAをDWORD型にまとめてるのに、なぜかアルファ値は別の関数(SetDrawBlendMode)で指定するようになってるので、アルファも同関数内で処理するようにした

・そのDWORD型にまとめる処理を毎回やってたら勿体無いんで、ゲームのプログラムの方で処理するようにした
 毎回変換しなくても、弾オブジェクトが持ってるDWORD型の色変数を渡すだけで済むように





まとめると、エラーチェックを削除して、色構造体と色変数を渡すようにた、って感じですね
色構造体と色変数が、型が違うだけで意味する内容は同じなんだけど、そこはまぁ、高速化ってことで……
あ、元の関数を書き換えたんじゃなくて、高速化したバージョンの関数を追加した感じです


ライブラリの改造なんてしたことないので、どうせ失敗するだろうなー、と思ってたら予想以上の成果でした
ぶっちゃけ最初にDXライブラリのソースをビルドするまでの方が大変だったかも……w

そのままじゃビルド通らないんで、いろいろ外部ライブラリ集めたり……
手順はリードミーに書いてあるんですけどね!





他にも、弾描画処理の中で呼ぶ関数は高速化したバージョンを作っといたほうがいいのかもしれないなぁ……
毎フレーム数千回呼んだりする関数はちょっと処理を軽くすれば驚くほど効果があるので面白いです

危ないけどねw
自己責任で……
スポンサーサイト

テーマ : ゲーム製作 関連
ジャンル : ゲーム

DXライブラリの中身を覗いてみた

ちょっとショッキングな出来事がありまして。

いままでずっと考えてた弾描画法が、実際にやってみたら重い重いw

弾1000発も出さないうちに処理落ちしてしまうという……



現在製作中のシューティングでは、弾画像をモノクロの画像で持っていて、描画輝度を設定して色の付いた弾を描画してたりするのです。
弾一つの描画に2回、描画輝度を変更するわけです(下図参照)
弾画像描画法的な



描画輝度を変えて、描画して、描画輝度を戻して、描画して、次の弾の描画処理へ……
って感じなんだけど、その描画輝度を変える関数が重い!
その処理をスキップすると5000発出しても大丈夫っていう


悩んだ挙句、DXライブラリのソースをダウンロードしてネックになってる関数の中身を見てみたり。

すると、中身はほとんどエラーチェックや引数をカラー構造体に代入したり、それをビット列に変換したりっていう感じでした。
それをスキップした高速化したバージョンの関数を追加してみようかなぁ、とか思ったり。

ネックがDirectX依存の部分じゃなければ、多分高速化できるはず……!



高速化に成功したらまた後で報告するかも


※追記
結果でました

テーマ : ゲーム製作 関連
ジャンル : ゲーム

+サークルのサイト+
森の中の猫の小屋 author:稲塚 春
+twitter+
+エントリサーチ+
+カテゴリ別エントリ+
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。