C++ 在桌面应用程序中使用OpenGL进行GUI设计有哪些缺点?

C++ 在桌面应用程序中使用OpenGL进行GUI设计有哪些缺点?,c++,user-interface,opengl,C++,User Interface,Opengl,C/C++有很多GUI库,但很少有基于opengl是一个相当多平台的图形库的想法。使用OpenGL在便携式应用程序中构建自己的最小GUI有什么大缺点吗 他正在这样做,而且似乎效果很好 编辑:我的问题不是关于使用外部库或创建自己的库。我主要关心的是使用opengl作为后端的库,例如,CEGUI或Blender的GUI 谢谢。显而易见的一点是,您基本上是自己构建GUI元素,而不是像wxWidgets或Qt那样设计得很好。如果您想要windows/button等中的GUI,请不要自己动手。有很多免费的

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

他正在这样做,而且似乎效果很好

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


谢谢。

显而易见的一点是,您基本上是自己构建GUI元素,而不是像wxWidgets或Qt那样设计得很好。

如果您想要windows/button等中的GUI,请不要自己动手。有很多免费的解决方案,wxwidgets、qt或GTK。如果你想要一个3d窗口,所有这些都有OpenGL支持。这里有一个奇怪的例子,有点像我做的一个大型物理实验:因为OpenGL GUI绕过了一些常见的图形抽象层,它可能会击败远程查看应用程序


在特定的情况下,我想我们希望允许通过VNC进行远程换档操作。除了一个使用OpenGL接口的程序(我们每小时只需要一次,但我们真的需要)之外,一切都很好。我们不得不推迟,直到OpenGL界面的远程版本可以准备好。

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

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

有多平台的解决方案,如glut、qt、wxWidgets等


如果您必须使用它们,为什么不使用内置的GUI元素呢。它们还让你有机会构建自己的,并利用框架来处理鼠标/键盘事件和其他事情。

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

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


Windows驱动程序:我们发现图形卡制造商在Windows上比OpenGL更好地支持DirectX,因为这是获得MSFT认证所必需的。低至中等范围的卡在OpenGL支持中通常会出现错误、功能缺失或彻底崩溃。

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


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

对于Qt4.5,如果你想使用OpenGL作为窗口渲染器,你可以选择

更多信息:


阅读评论,了解有关这方面的问题。

是的,这就是我一直在寻找的答案。谢谢你,德姆奇!说得好。一般来说,任何使用3D加速的东西对VNC等应用程序都是不可见的。有一些方法可以让它工作,但它会导致很多性能问题,因此不是一个好主意。我认为要解决这个问题,你必须将应用程序视为GUI核心解耦,这样你就不需要VNC来控制它。我没有参与解决方案,但他们安排在远程主机上显示OpenGL。有点笨重,但这意味着我可以在平时的时区坐在我的PJ上轮班,所以我很高兴。事实上,远程使用支持OpenGL的应用程序有几种可能性,例如xvnc/xf4vnc、virtualgl,甚至只是普通的X11。最好的解决方案取决于您希望OpenGL硬件加速是在远程机器上进行,还是在本地查看器上进行。使用预处理器条件和glut制作多平台OpenGL程序非常容易。对于整个GUI系统来说,它远没有使用像qt这样的巨大库,它非常类似于使用qt制作多平台opengl程序:派生自QGLWidget;覆盖initialiseGL、paintGL、resizeGL;将新类作为mainwidget分配给QApplication,就是这样。图书馆更大,是的。但是我看不出有什么问题吗?你能告诉我他们是如何给你机会构建自己的GUI元素的吗?你的链接已经失效了。这里有一个新的链接:现在是2015年,你提到的所有GUI工具包出于这样或那样的原因仍然很糟糕(Qt是最好的,我整天都在其中编程,但仍然很糟糕)。现在是2019年,我看到跨平台图形API的潜力的原因是不需要编写三次GUI(iOS、Android、Windows)在维护大量传统本地移动代码支持的同时,vulkan能做到吗?