创建DirectX设备后,StopWatch返回Integer

时间:2009-12-27 22:40:24

标签: c# .net directx floating-point slimdx

问题非常“简单”。 我有一个引擎可以与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:在另一台机器上测试过,结果是一样的......在创建设备之前一切正常,只有整数......

1 个答案:

答案 0 :(得分:2)

默认情况下,Direct3D 9将浮点精度降低到32位。您可以使用D3DCREATE_FPU_PRESERVE标志来阻止此操作。在SlimDX中,您可以在创建设备时使用SlimDX.Direct3D9.CreateFlags.FpuPreserve标志。