【发布时间】:2018-05-06 18:02:52
【问题描述】:
我目前正在开发一个标准的 Windows 桌面应用程序(标准意味着没有花哨的东西:只有按钮、文本、滑块等),并且在研究了一些 GUI 框架和被所有人排斥。由于这是一个爱好项目,我也愿意尝试,并决定制作 GUI 即时模式,而不是保留模式,因为我非常喜欢它简化代码的方式。不过,这是一个问题:
在将即时模式 GUI 用于典型桌面应用程序时,与保留模式 GUI 相比,它对性能有何影响?
我总是听说 IMGUI 性能更差,因为它必须重绘每一帧(或者,如果它以某种方式缓存,它仍然必须每帧执行逻辑)。但是我们在这里谈了多少?我会消耗两倍的 CPU 时间吗?更多的?如果我假设运行 20 个 IMGUI 程序,它是否会最大限度地使用 CPU(假设我已经对其进行了优化)?我只是想知道大致情况以及权衡在非游戏环境中是否仍然可行,无需重绘每一帧。
关于延迟还有一个我不明白的含义。在chapter discussing IMGUI中的work-in-progress book by Johannes Norneby中,解释如下:
帧剪切
在实时环境中需要了解的 IMGUI 的一个方面 应用程序(每秒不断渲染新帧多次) 是用户交互总是对某些事情做出反应 是在前一帧上绘制的。这是因为用户界面必须 至少绘制一次,让用户知道有小部件 在那里进行交互。大多数情况下,这不会导致任何 如果帧速率足够高会出现问题,但这是有待解决的 知道。
这在保留模式 GUI 中有何不同?这是否意味着我比保留模式的 GUI 多了一帧的输入延迟?
【问题讨论】:
-
我强烈建议您不要实现自己的 GUI 库,即使是作为一个爱好项目。做对极难,细节很多,很容易出错。即使不存在您喜欢的 GUI 库,最好将您的爱好 GUI 库实现为现有库的薄包装器(基本上,使用带有包装器的现有库之一来使 API 更像您想要的)。 GUI 库太大而不能成为一个有趣的爱好项目
-
想想你希望你的 GUI 库有多详细或多深。例如,您是围绕 OS api 编写包装器,还是绕过 OS 并直接写入硬件?你应该看看 WxWidgets 和 Qt 看看这个项目会有多大。
-
好吧,当我不再玩得开心时,我肯定会停下来,现在我有,所以我会继续。我们会看到多久。不过,这与问题并不真正相关,如果我决定使用现有的 gui 框架,我的观点对我来说也很重要:imGUI 在非游戏环境中是否可行,如果可行,对性能有何影响?
-
我现在看到,我可能过于强调我自己的框架的部分。我对性能影响感兴趣,无论我最终是否会使用其他人的框架。
-
@HansPassant 您似乎暗示即时模式 GUI 只能使用 CPU 进行渲染,而不是 GPU。我不明白为什么会这样,即时模式 GUI 中的“即时”实际上只适用于控制流以及您如何看待图形元素,您如何渲染它们是不同的游戏。如果我没记错的话,两种方式都可以渲染,而且不限于 CPU。
标签: c++ performance user-interface desktop-application immediate-mode