先日24時間プログラミングでビルドしたプログラムは、残念ながら(案の定?) 現状では、Dx3Dのメモリリークが発生してます…。そんなもんで、必死こいて原因を突き止め修正をしようとするわけですが……
わからねぇ… orz
こういう時は、DirectXコントロールパネルで 「BreakOn AllocID」 の項目に リークしてるリソースのアロケートIDを設定してあげれば、そのIDが発行された時に(?)ブレークしてくれるようです。つまり、問題個所が特定しやすくなる(ハズな)のですが……
確かに止まってくれるんです。AllocID = 30 がリークしてるんで 30 とか 29 とか指定すると止まってくれるんです。が、止まる関数が
IDirect3D9::CreateDevice() の内部ってどーいうこっちゃ。 orz
……これに関連してかはわかりませんが、CreateDevice() が完了すると出力ウィンドウには次のようなメッセージが…
D3D9 Helper: Warning: Default value for D3DRS_POINTSIZE_MAX is 2.19902e+012f, not 9.67461e-317f. This is ok.
D3D9 Helper: Error: Default value for D3DSAMP_DMAPOFFSET[0] is incorrect. Expected 0x100, Returned 0x0
D3D9 Helper: Error: Default value for D3DSAMP_DMAPOFFSET[1] is incorrect. Expected 0x100, Returned 0x0
:
:
D3D9 Helper: Error: Default value for D3DSAMP_DMAPOFFSET[15] is incorrect. Expected 0x100, Returned 0x0
いやマテ。デフォルトの値が不正ってなんじゃい!
ドライバが古いからいけないのかと思ってアップデートしてみたんですが、状況変わらず……。google先生に聞いても、1件だけヒットするも英語圏外(ドイツ or フランス?)なので、根本的に読めないし…
…ちゅーかその前に、私、明日から部活の合宿で準備しなきゃいけなかったりするんですが…。あぁ、この問題が気になってしょうがない…(苦笑