いろきゅうの(元)はてなダイアリー

はてなダイアリーから移行中…

vs Direct3D9

先日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 フランス?)なので、根本的に読めないし…

…ちゅーかその前に、私、明日から部活の合宿で準備しなきゃいけなかったりするんですが…。あぁ、この問題が気になってしょうがない…(苦笑