问题非常“简单”。 我有一个引擎可以与C#中的SlimDX一起使用DirectX9和DirectX10。 我使用秒表课来计算游戏时间并测试一些常规的速度。 奇怪的是,在创建DirectX9之后,StopWatch的浮点变得疯狂,而GetTimeStamp()/ Frequency除法只返回整数值(单个带有.000000)。为什么这个? 请注意,对于DirectX10,此问题不存在。 (如果我在DirectX9中打开设备之前进行检查就可以了,就在没有之后。)
这是我用于两个版本(DirectX10和DirectX9)的代码
(Double)Stopwatch.GetTimestamp() * 1000d / (Double)Stopwatch.Frequency
任何线索?
编辑:我使用QueryPerformanceCounter进行了测试,但结果是一样的。在创建DirectX9设备之前完美计算,仅在整数之后。EDIT2:经过一些测试后,我设法让它显示一些浮点值,但它们与精确的DirectX10非常不同。
以下是一些例子:
DirectX10的
表格创建:110.09241
LoadContent Full:738.64486
LoadContent ContentManager:593.57572
DirectX9的
表格创作:112.45000
LoadContent Full:489.50000
LoadContent ContentManager:355.50000
EDIT3:在另一台机器上测试过,结果是一样的......在创建设备之前一切正常,只有整数......
答案 0 :(得分:2)
默认情况下,Direct3D 9将浮点精度降低到32位。您可以使用D3DCREATE_FPU_PRESERVE
标志来阻止此操作。在SlimDX中,您可以在创建设备时使用SlimDX.Direct3D9.CreateFlags.FpuPreserve
标志。