【问题标题】:What disadvantages could I have using OpenGL for GUI design in a desktop application? [closed]在桌面应用程序中使用 OpenGL 进行 GUI 设计有什么缺点? [关闭]
【发布时间】:2023-03-28 19:07:01
【问题描述】:

有大量用于 C/C++ 的 GUI 库,但其中很少有基于 opengl 是一个相当多平台的图形库的想法。使用这个 OpenGL 在便携式应用程序中构建我自己的最小 GUI 有什么大的缺点吗?

Blender 正在这样做,而且看起来效果不错。

编辑:我的问题不是关于使用外部库或制作我自己的库。我主要关心的是使用使用 opengl 作为后端的库。 Agar,例如 CEGUI 或 Blender 的 GUI。

谢谢。

【问题讨论】:

    标签: c++ user-interface opengl


    【解决方案1】:

    显而易见的是,您基本上是在自己构建 GUI 元素,而不是像 wxWidgets 或 Qt 那样精心设计。

    【讨论】:

      【解决方案2】:

      如果你想要一个图形用户界面,如窗口/按钮等。不要自己做。有很多免费的解决方案,wxwidgets、qt 或 GTK。如果你想要一个 3d 窗口,都支持 OpenGL

      【讨论】:

      • 现在是 2015 年,你提到的所有 GUI 工具包由于某种原因仍然很糟糕(Qt 是最好的,我整天都在用它编程,但它仍然很糟糕)。跨度>
      • 现在是 2019 年,我看到跨平台图形 API 的潜力的原因是消除了将我的 GUI 编写三遍(iOS、Android、Windows)的需要,同时保留了许多传统的原生移动设备代码支持。
      【解决方案3】:

      这是一个奇怪的问题,我参与了一项大型物理实验:因为 OpenGL GUI 绕过了一些常见的图形抽象层,它可能会击败远程查看应用程序。

      在特定情况下,我认为我们希望允许通过 VNC 进行远程移位操作。除了一个使用 OpenGL 接口的程序(我们只需要大约每小时一次,但我们真的需要)之外,一切都运行良好。我们不得不延迟,直到可以准备好远程版本的 OpenGL 接口。

      【讨论】:

      • 是的,这就是我正在寻找的答案。谢谢dmckee!
      • 好点。一般来说,任何使用 3D 加速的东西对于 VNC 等应用程序都是不可见的。有一些方法可以让它工作,但它会导致很多性能问题,因此不是一个好主意。
      • 我认为要解决此问题,您必须将应用程序视为 GUI 核心解耦,因此您不需要 VNC 来控制它。
      • 我没有参与解决方案,但他们安排在远程主机上显示 OpenGL。有点笨重,但这意味着我可以在我通常的时区换上睡衣,所以我很高兴。
      • 实际上,远程使用支持 OpenGL 的应用程序有多种可能性,例如 xvnc/xf4vnc、virtualgl 甚至只是普通的 X11。最佳解决方案取决于您是希望在远程计算机上还是在查看器本地完成 OpenGL 硬件加速。
      【解决方案4】:

      你不能只使用 opengl,你需要一个特定于平台的代码来为 opengl 设置一个窗口。 来自免费提供的opengl red book

      OpenGL 被设计为流线型, 独立于硬件的接口 在许多不同的硬件上实现 平台。为了达到这些品质, 没有用于执行窗口的命令 任务或获取用户输入是 包含在 OpenGL 中;相反,您必须 通过任何窗口系统工作 控制特定的硬件 你正在使用。

      为此有多平台解决方案,例如 glut、qt、wxWidgets...

      如果您无论如何都必须使用它们,为什么不使用内置的 GUI 元素。它们还让您有机会构建自己的框架,并利用框架来处理鼠​​标/键盘事件等。

      【讨论】:

      • 使用预处理器条件和 glut 制作多平台 opengl 程序非常容易。对于整个 GUI 系统,它远没有使用像 qt 这样的庞大库。
      • 使用qt制作多平台opengl程序非常相似:派生自QGLWidget;覆盖initialiseGL、paintGL、resizeGL;将您的新类作为 mainwidget 分配给 QApplication,仅此而已。图书馆更大,是的。但我看不出有什么问题?
      • 您能告诉我他们是如何让您有机会构建自己的 GUI 元素的吗?
      【解决方案5】:

      重新发明轮子:是的,你会这样做的。但我注意到 OP 在问题陈述中使用了“最小”这个词,所以假设它真的不需要扩大到所有这些,它可能是一个足够小的轮子,没关系。我目前工作的产品在三个平台(Win、Mac、Linux)上支持 OpenGL,我们构建了所有自己的小部件(文本框、按钮、对话框)。这是很多工作,但现在我们已经完成了它,我们拥有大量堆栈,并且当事情没有按预期工作时,不必调试到第三方框架。完全控制体验真是太好了。总有一些你想做但框架不支持的事情。就像我们业务中的所有事情一样,这是一种权衡,您只需权衡您的需求和按时完成的需求。

      可移植性:是的,您仍然需要编写特定于平台的代码来引导所有内容。如果您以前没有这样做过,这将很困难,因为它需要您了解所有目标平台。

      Windows 驱动程序:我们发现显卡制造商在 Windows 上对 DirectX 的支持比对 OpenGL 的支持要好得多,因为这是获得 MSFT 认证所必需的。中低档显卡通常在其 OpenGL 支持中存在错误、缺少功能或彻底崩溃。

      【讨论】:

      • vulkan 能做到吗?
      【解决方案6】:

      您正在失去本机平台的可访问性功能。例如,在 Windows 上,大多数控件向屏幕阅读器或其他支持无障碍用户的工具提供信息。

      基本上,除非您有真正的理由这样做,否则您不应该这样做。

      【讨论】:

        【解决方案7】:

        在 Qt 4.5 中,您可以选择是否使用 OpenGL 作为窗口渲染器。

        更多信息: https://www.qt.io/blog/2008/10/22/so-long-and-thanks-for-the-blit

        阅读 cmets 了解这方面的问题。

        【讨论】:

        猜你喜欢
        • 2011-07-03
        • 1970-01-01
        • 2010-11-16
        • 2013-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-13
        • 2011-01-27
        相关资源
        最近更新 更多