问题很“简单”。我有一个引擎,可以与DirectX9和DirectX10的SlimDX在C#中工作。我使用秒表类来为游戏计时,并测试一些例程的速度。奇怪的是,在创建DirectX9之后,StopWatch的浮点数变得疯狂,GetTimeStamp()/Frequency除法只返回整数值(.000000为single)。为什么是这个?请注意,对于DirectX10,这个问题并不存在。(如果我在DirectX9中打开设备之前做了检查,它可以工作,就在不要之后。)
这是我在两个版本(DirectX10和DirectX9)中使用的代码
(Double)Stopwatch.GetTimestamp() * 1000d / (Double)Stopwatch.Frequency有什么线索吗?
编辑:我使用QueryPerformanceCounter进行了测试,但结果是相同的。在创建DirectX9设备之前进行完美的计算,只有整数之后。
EDIT2:经过一些测试,我设法让它显示了一些浮点值,但它们在精度上与DirectX10有很大的不同。
下面是一些示例:
DirectX10
表单创建: 110.09241
LoadContent已满: 738.64486
LoadContent ContentManager : 593.57572
DirectX9
表单创建: 112.45000
LoadContent已满: 489.50000
LoadContent ContentManager : 355.50000
EDIT3:在另一台机器上测试,结果是same...before创建的设备都没问题,之后只有整数...
发布于 2009-12-28 21:51:41
默认情况下,Direct3D 9将浮点精度降低到32位。您可以使用D3DCREATE_FPU_PRESERVE标志来防止这种情况。在SlimDX中,您可以在创建设备时使用SlimDX.Direct3D9.CreateFlags.FpuPreserve标志。
https://stackoverflow.com/questions/1967266
复制相似问题