【发布时间】:2015-11-12 15:33:39
【问题描述】:
我需要编写主要内容将由 OpenGL 渲染的应用程序(类似于游戏引擎),但没有类似于 Qt 小部件所做的基于 OpenGL 的良好 GUI 库(但它们是软件渲染的)。
当我浏览 Qt 的源代码时,所有的绘画都是通过 QPainter 完成的,甚至在 OpenGL 中也有 QPainter 实现,但是在 Qt 5 中放弃了对多个图形后端的支持,所以你不能在 OpenGL 中渲染 Qt Widgets不再(我不知道为什么)。
问题是您不能同时使用软件和硬件渲染来绘制窗口表面。您可以让窗口与 OpenGL 上下文相关联或使用软件渲染。这意味着如果我想拥有具有基于 OpenGL 内容的复杂 GUI 的应用程序,我需要使用 OpenGL 绘制所有内容(这很难,因为正如我所说,没有好的 GUI 库),或者我可以使用软件渲染(例如 Qt),然后将该图像加载为 OpenGL 纹理(可能会造成很大的性能损失)。
有谁知道使用软件渲染的 GUI 作为纹理加载到 OpenGL 的任何好的应用程序?我需要确保它可以在没有大的性能损失的情况下工作,但找不到很好的例子,即使对于游戏引擎之类的应用程序也能很好地工作。
【问题讨论】:
-
你能不能换个方式?将 OpenGL 场景渲染为纹理贴图,然后将该纹理作为 2D 元素放置在 GUI 中。我认为这种方法更类似于网络浏览器所做的,将画布合成到 HTML 页面上。
-
emackey:是的,应该是可以的,但这可能意味着将内容从 GPU 内存加载到 RAM,然后将其显示为图像,因此最终将其从 RAM 移回 GPU。
-
添加
OpenGL标签以获得更多回复:) -
你可以试试 niftyGUI
-
Qt 可以和 OpenGL 一起使用。除此之外,您可以强制每个 qt 小部件具有 HWND(从而在其中创建 OpenGL conrext),还有QGlWidget 和QOpenGlWidget
标签: user-interface opengl