FMX Direct 2D问题

时间:2012-05-24 14:06:44

标签: delphi delphi-xe2 firemonkey direct2d

大家下午好!

我正在遇到一个当前项目中令人讨厌的问题。我正在我目前的一个项目中使用硬件库(由Andreas Hausladen编写的NVAPI Pascal头文件)。这个lib允许我从NVIDIA GPU中检索信息。我正在使用它来检索温度,并且在Firemonkey的TAnimateFloat的帮助下,我正在调整定制刻度盘上的角度以指示温度。

由于FMX默认使用Windows上的Direct 2D,我可以使用任何各种“游戏玩家”工具监控FPS(MSI Afterburner,FRAPS等)。

我遇到的问题是,当我将系统置于睡眠模式(暂停到RAM / S3),然后再次启动时,我的应用程序上的界面被部分或全部涂黑,并且什么都没有在用户界面上显而易见。我正在定期调用NVAPI库的初始化并通过计时器检查结果,但这不能解决问题。我也在父拨号上运行ProcessMessagesrepaint并且它是子控件(因为我似乎无法找到表单的repaint甚至是等效的。)

我尝试了各种版本的库,每个版本都存在相同的问题。下一段表明这实际上不是问题,而且它实际上是渲染器的错误。

我有一个解决方案,但我想知道是否有更多......优雅,可用。我的解决方案涉及在FMX.Types.GlobalUseDirect2D := False;之前在我的项目源中添加Application.Initialize。但是,这迫使FMX使用GDI +而不是Direct2D。它当然有效,但如果可以的话,我想保持D2D开放。我可以使用FindCmdLineSwitch根据参数来打开/关闭这个,但这仍然需要我重新启动应用程序以从D2D更改为GDI +,反之亦然。

有什么奇怪的是,FPS计数器(在我的情况下来自FRAPS)表明UI中仍然存在活动(因为值会发生预期变化),但UI本身并不明显令人耳目一新。 / p>

这是与Direct2D相关的问题,还是Firemonkey实施的错误?更重要的是,有没有比禁用D2D更好的修复方法?最后,也是相关的,是否可以“重新初始化”应用程序而不首先终止它(因此我可以允许用户在GDI +和D2D之间切换而无需重新启动应用程序)?

1 个答案:

答案 0 :(得分:1)

这可能是更新4修补程序之前FM的问题 - 26664 / QC 104210 修复了用户解锁后FireMonkey HD表单无响应的问题 - 安装此可能为您解决问题。

更新应该是您从EDN下载注册用户的一部分(直接链接http://cc.embarcadero.com/item/28881)。