1

这个问题很“简单”。我有一个引擎,可以在 C# 中使用带有 SlimDX 的 DirectX9 和 DirectX10。我使用 Stopwatch 类来计时游戏并测试一些例程的速度。奇怪的是,在创建 DirectX9 之后,秒表的浮点数变得疯狂,GetTimeStamp()/Frequency 除法只返回整数值(单个与 0.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:在另一台机器上测试,结果是一样的......在创建设备之前一切正常,只有整数......

4

1 回答 1

2

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

于 2009-12-28T13:51:40.787 回答