LuaJITがDirectXとともに使うと問答無用で落ちる
前々から凄い意味が分からなかったんですが、コンソールでエラー内容を見れるようにしてようやく分かりました。DirectX側でFPUの演算速度が落とされていたからだそうです。
空想具現化プログラミング [Lua] Luaの数値型の精度の問題
ここによると、FPUの演算速度がDirectXなどによって落とされた場合、演算精度がfloatなみに落ちるとあります。
実際にLuaJITをDxLibを初期化した状態で実行すると、「PANIC: unprotected error in call to Lua API(bad FPU precision (use D3DCREATE_FPU_PRESERVE with DirectX))」なるエラー出力が。
いわれたとおりなので、Direct3Dデバイスを初期化する際にD3DCREATE_FPU_PRESERVEフラグを渡して精度を下げさせないようにします。
DxLibの場合、SetUserFPUPreserveFlag(TRUE); をDxLib_init()の前に呼び出すだけです。
// DxLib で Direct3D デバイスを作成する際に // D3DCREATE_FPU_PRESERVEフラグを渡すようにする ::SetUseFPUPreserveFlag(TRUE); ::DxLib_Init(); // 後は通常通りLuaJITを初期化したり ...
案外簡単でしたね。
デバッグ時にはやはりコンソールが必要だと思います。