ハンドルは取っておこう

ManagedDirectXからプログラマブルシェーダーを使う場合、特にHLSLを使う場合なんかはこんな感じにパラーメーターを渡すと思います。

effect.SetValue(effect.GetParameter(null, HandleName), Value);

ハンドルネームからEffectHandleを取得して、それをSetValueメソッドに渡して値を設定します。それを面倒なのでこんな感じに1文で書いていたのですが。。。
前々から気になっていたのですが、このeffect.getParameter()メソッドが結構遅いみたいです。特に、VisualStudioでデバッグしていると、アンマネージドな部分を読んでいるので、FPSがかなり落ち込みます。
ってことで、頻繁に呼び出される部分だけハンドルをあらかじめ取得しておくようにしたところ・・・
GeForce7600GSの環境でFPSが75から83、C#デバッグ環境では15から60程度まで上がりました。
さぼっちゃだめですね。


そんなこんなで、C#デバッグ中でも快適に動くようになったので、死んでいたシーン作成機能とマルチタイムライン機能を復活させました。

っても、マルチタイムラインは一部分が未実装なんですけど。しっかし、バグがたまってきたなぁ〜このソフト。
ここからシーンのソースコードを吐き出せるようにして、ちょっとゲームっぽいものでもつくろうかな〜
あ、BGMと効果音もなるようになりました。前に宣言したとおり、手抜き実装なのであまり機能とパフォーマンスはありませんが。