D3DCREATE_FPU_PRESERVE
4/15/2008 6:29:21 AM
在FPU中,却存在着三种运算精度:single precision(24bits),double precision(53bits)(一般应用程序启动时的精度),double extended precision(64bits,很少用)。FPU的默认精度是53bits的double precision。D3D的CreateDevice函数调用后会将FPU的运算精度改成24bits。除非指定了D3DCREATE_FPU_PRESERVE参数,否则不能你的应用程序浮点精度也会降低。
悲剧的是你不能确认dx或者其他3d程序是否给你切换回来,特别调试时候经常非正常退出,感觉有些dx版本或者显卡硬件可能也有bug,即使设置D3DCREATE_FPU_PRESERVE也不能保证切换回来。这时我们需要手动切换
unsigned int uiFloat;
_controlfp_s(&uiFloat, 0, 0);
_controlfp_s(0, _PC_53, MCW_PC); //切换到double精度
.......
_controlfp_s(0, uiFloat, MCW_PC); //切换到原来的精度
crt 运行库默认是double精度的
浙公网安备 33010602011771号