window 之外的 opengl 菜单是如何实现的?

How are opengl menus that go outside of the window implemented?

我正在研究有时当您右键单击时,菜单会超出 window。

这是用单独的 window 实现的吗?如果是这样,我怎样才能获得此功能。我正在尝试使用 GLFW,但我知道这是否可行。

目前我在 windows,但我喜欢保持我的选择开放,这就是为什么 GLFW 更可取。

我注意到GLUT有这样的功能。如果你对我正在看的东西感到困惑,那就看看那个。

感谢您的帮助!!

重叠菜单(在 MS Windows 中)必须作为新的 top-level window 实现,您将拥有一个新的 OpenGL 渲染上下文并在其中绘制菜单 space - 是的,对于 parent window,

菜单的 edge-case 来说,这是相当多的工作

然而,这在 OpenGL 编程中并不常见,因为如果您正在开发 full-screen 游戏,那么菜单将始终显示在主 window 中,即使它full-screen 不是一款你的用户真的不会注意到他们的游戏,因为游戏往往会使用不同的 UI 概念,例如 radial-menus,这不会超出 parent window.

或者,如果您正在处理 non-game 标题,它很可能不是 full-screen,而是将成为使用本机渲染的较大应用程序中的 OpenGL 渲染区域UI 工具包(例如 3ds Max、AutoCAD 等),在这种情况下没问题:只需使用本机菜单即可。

当然,您无论如何都可以在 OpenGL 应用程序中使用本机菜单,前提是您对本机 window 消息进行了必要的管道处理。