2008/10/06(月)GSDK という名前にした
いわゆるIDisposableをつけなきゃいけないクラスについてabstractな基底を作って、メモリ回収はGCに任せようとか思ってたが。Sceneクラス破棄してスコープアウトしてもScene直下で持ってるリソースのデストラクタが呼ばれず、先にDirect3DとかDirectSoundのDisposeが呼ばれて、ストリーム再生中のバッファでAccessViolationがでる。確かにGCがオブジェクトのデストラクタを呼ぶタイミングは予想できないのに、実験的にはちゃんと呼んでくれてたという意味不明な理由で、あほな実装に走った。今振り返ってみれば、どうしてこのような実装にしたのかわからない。これは由々しき事態だ。結局Paneliaみたいに、親子を考えて寿命管理しないといけない。C#になってもリソースの寿命管理からは逃れられないのか。GSDKで文字を書くとPaneliaよりも極端にFPSが落ちる謎の現象も確認。同じ文字列を描いてるのに、ぱねりあでは700FPS、GSDKでは150FPSしかでない。原因がさっぱりわからなくて困っている。PresentParametersやRenderStateはまったく同じ設定のハズなのに、いったいどこが違うんだ?うーーん……。昨日やっと、ひととおり書き終わったつもりになって、初めてビルドして動かしてみたら、でるわでるわ。バグのやま。まぁ当たり前なんだけど。上に書いたみたいな仕様バグも出てるし、どうしようかな。どんどん完成が遅れていい加減嫌になってくるなぁ。当初5月に完成する予定じゃなかったっけ。
2008/09/28(日)雑記
全面的に作り直すのはやめることにしました。Version. Panelia をコピペしながら"見直し"することに。もう、Direct3D周りは一通り書き終えてしまったのですが、後DirectSoundと、DirectInputとSceneControllerとタスクシステムなんてやってたら、日が暮れるではなく、年が変わる!(笑) static化したいなんて言ってましたが、これもやめることにしました。やっぱり美しくないなぁってことで。で、まぁ、ここを書き換えないんだったら、あんまり全面書き直しをする理由もないので……開発スケジュール大幅に遅らせた上にこんなんではなんだか、アレですが……。まぁ、いい経験にはなったかなぁ。
QoFを作り直そうとかいうお話が出ていますが、たかだか1年ちょっと前のコードなのに読むのがとても辛い。きたない。汚い。きたない。スパゲティ。これ書いたやつ馬鹿なの? しぬの? と。どうにも、あの頃は「急がば回れ」という言葉を知らなかった(いや、言葉を知らなかったわけではない)ようです。仕様変更がおっかなびっくりすぎです。書き直した方がはえーんじゃねーの。このフレームワークができあがったら、QoFはたぶん一週間で書き直されるものとは思いますが。さぁどうしようかな。冬コミの企画も決まってません。結構QoFR(仮)も気合い入れて作ってるし、新再販(謎)でもいいんじゃないのかしらとか思いつつある。
なんだってくそいそがしくていやんなるぜ。もうあああああああああああ。冬休みが後2日です。
2008/09/25(木)にゅーふれーむわーくの悩み5
間が空いてしまいました。まだ悩んでます。あはん。
2008/09/18(木)にゅーふれーむわーくの悩み4
例によって、staticなの? instanceなの? 問題と格闘中。
いい加減こればっか悩んでても先に進まないので、割り切ってとりあえず作ってみて使ってみてそれからまた考えるかもしれないということにした。
2008/09/18(木)にゅーふれーむわーくの悩み3
結局描画はSprite使うことにして、今度はライブラリAPIの提供スタイルについて悩んでいる。
たとえば、Direct3Dをラッピングしたクラスを作った。個人的にはDirect3Dもだんだん理解が進んできたし、この程度のものをもはや何のためにラッピングしてるのか全然さっぱりわかんなくなってきてるんだけど。
2008/09/12(金)にゅーふれーむわーくの悩み2
2008/09/11(木)にゅーふれーむわーくの悩み
もし音ゲを作ったら、内部処理60fpsはやっぱ足りない気がする。判定はともかく、音出しは音が最悪16ms遅れるわけで、少し音ゲ遊んでる人には「なんかズレてる?」ってのはまぁバレる。というか、俺だったらバレる。気持ちよくなくなるし。内部処理を増やそうとすると、描画を実行するタイミングとか測るのが難しい。やっぱりスレッド2本立てでやるべきなのかなぁ、とかいろいろ考えちゃう。しかしてマルチスレッドプログラミングは大変だ。
そんなこんなで、新SDK作りが全然進まない。DirectXってスレッドセーフなのかな。てか、.NETのスレッドはソフトウェアスレッドらしい、Win32ネイティブなスレッドとの関係もいまいちよくわかんない。こういうことってサークルにも相談できる相手はいなくて、これからどうしたらいいのかなぁ。