Direct3Dにて。

Direct3Dにて今日はまったこと。

症状

IDirect3DDevice9::Clear()が失敗する。

ありえる理由

D3DCLEAR_ZBUFFERを指定しているのに、Z-Bufferがない。

対処

Z-BufferをIDirect3DDevice::CreateDeviceを呼ぶときについでに作成しておくといい。

方法

D3DPRESENT_PARAMETERS構造体に
EnableAutoDepthStencil = 1;
AutoDepthStencilFormat = D3DFMT_D16;
を指定すれば、16ビットのビット深度を持つZ-bufferが勝手に作られる(らしい)。

これやんねえと描画しない部分が全部ゴミになる('д`)

教訓

返り値判定は必ず書くべし。