首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建DirectX设备后,StopWatch返回整数

创建DirectX设备后,StopWatch返回整数
EN

Stack Overflow用户
提问于 2009-12-28 06:40:24
回答 1查看 518关注 0票数 1

问题很“简单”。我有一个引擎,可以与DirectX9和DirectX10的SlimDX在C#中工作。我使用秒表类来为游戏计时,并测试一些例程的速度。奇怪的是,在创建DirectX9之后,StopWatch的浮点数变得疯狂,GetTimeStamp()/Frequency除法只返回整数值(.000000为single)。为什么是这个?请注意,对于DirectX10,这个问题并不存在。(如果我在DirectX9中打开设备之前做了检查,它可以工作,就在不要之后。)

这是我在两个版本(DirectX10和DirectX9)中使用的代码

代码语言:javascript
复制
(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创建的设备都没问题,之后只有整数...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-28 21:51:41

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1967266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档