【发布时间】:2013-08-01 21:34:30
【问题描述】:
图形用户界面隐藏了神秘的机制。它将 2D 和 3D 上下文混合在一个屏幕上,并允许这两个截然不同的世界无缝组合。但是它们实际上以何种方式以及在哪个级别交错呢?
实践表明,OpenGL 上下文可以嵌入到 2D 小部件库中,因此整个 2D 界面可以由 OpenGL 支持。此外,一些应用程序可能会探索硬件加速,而其他应用程序则不会(在同一屏幕上呈现时)。图形卡是否“了解”屏幕上的 2D 和 3D 区域以及窗口管理器是否会产生有凝聚力的前端的错觉? ...人们会注意到加速窗口(3D,视频)“跳跃”以适应 2D 界面,例如滚动网页或在屏幕上移动视频播放器。
这个问题似乎是微不足道的,但我还没有遇到任何人能够给我一个全面的答案。一个答案,它可以让我将 OpenGL 上下文嵌入到 GTK+ 应用程序中,并了解它为什么以及如何工作。我已经尝试过 GtkGlExt 和 GLUT,但我想深入了解这个主题并编写自己的解决方案作为学术项目的一部分。我想知道 X、GLX、GTK、OpenGL 和窗口管理器之间的关系是什么,以及如何探索这个库网络以有意识地对其进行编程。
我不希望有人会在这里写论文,但我会感谢任何关于该主题的指示、建议或文章链接。
【问题讨论】:
-
你想的太复杂了。 OpenGL 只是另一个可用于在常规 X11 窗口上绘制的 API。 GTK+ 本身(如果在 X11 上运行)将只使用 X 服务器提供的图形基元,即 X 核心、XRender 和 GLX/OpenGL。请参阅我的回答stackoverflow.com/a/8777891/524368 如此详尽的解释。
-
@datenwolf 感谢您的回答——我掌握了用于绘图的 GTK+ 库图的一般概念。但是它如何在相反的方向工作,即本机窗口事件如何传播回应用程序?我知道如何使用 Xlib 或 WinAPI 本地捕获它们;以及如何为此使用 GLUT。但是是否有一个非 GLUT 的便携式解决方案可以使用,例如同时为 GTK+ 实现支持 OpenGL 的小部件?
-
嗯,大多数框架和工具包都实现了一个主事件循环,它使用 Xlib/Xcb 或 Win32 或任何使用的窗口 API 的常规函数,从本机系统检索事件并将它们转换为自己的内部事件格式;然后他们将它们注入到他们自己的内部事件传播系统中。
标签: opengl user-interface gtk