PC用眼鏡【管理人も使ってますがマジで疲れません】 解約手数料0円【あしたでんき】 Yahoo 楽天 NTT-X Store

無料ホームページ 無料のクレジットカード 海外格安航空券 ふるさと納税 海外旅行保険が無料! 海外ホテル

log

2010.02.24 C++:ストックバッファを作ってみました

今までやろうやろうといいつつやっていなかったアニメーションバッファの
ストック&再利用を試してみることにしました。
…はい、最近地味な作業ばかりが続いております。

とりあえずはじめはDirectXのバッファ型ではなく、自作の
頂点用構造体を利用して配列でバッファを作ってみたんですが。。
これがなぜか、45fps→40fpsと逆に速度が遅くなってしまったのです。

色々悩んだ末、ひょっとしたらD3DPOOL_SYSTEMMEMはただ
物理メモリに作成するのではなくて、GPUにアクセスしやすい
位置(?)に格納しているのではないかなと思い、今度は
DirectX本来のバッファ型で作成してみると、今までMAXで48fpsまでしか
でなかったのが、とりあえず50fpsまででるようになりました!
たかだか数fpsなんですが、50fpsまでいくと今までの地道な努力が
少しは報われたような気がします。当初はたったの20fpsでしたからね苦笑。

結論からいってしまうと、CPUで計算するかGPUで計算するかなんて
ほとんどどうでもいいくらい、CPU-GPU転送にかかる時間は
馬鹿でかいってことなんでしょうね。

それとストックバッファを利用してプログラムを数分起動していると、
なぜだかFPSが不安定になってプログラムのウィンドウが消えるという
症状が何度も発生してしまいました。おまけにVCもフリーズして
デバッグ結果が分からないという。。

おそらくはLock(),Unlock()を間髪入れずに何度も使用しているので
CPU-GPU間のアクセスでエラーが発生したのではないかなと
思うんですが、とりあえず原因はこれから調べるところです。

今まで、「こんな部分でエラーなんてでないだろ」と思って、
エラーチェックを外している部分が多かったんですが。。
ここに来てツケが回ってきやがりました。急がば回れ、と。

それと、色々と調べているうちに固定パイプラインでのスキンメッシュの
描画方法がなんとなく分かってきたので、これも近いうちに試してみて、
上手くいった場合はストックバッファなんて変な実装をやらずに
固定パイプラインで描画しようと思います笑。