opengl 的窗口处理程序

Posted

技术标签:

【中文标题】opengl 的窗口处理程序【英文标题】:window handlers for opengl 【发布时间】:2009-01-20 01:56:54 【问题描述】:

我一直在使用 glut 作为我的窗口处理程序来编写 opengl,最近我一直在考虑切换到备用窗口处理程序(例如 wxWidgets 或 qt)是否有任何优势。

是否有任何重大差异,或者只是口味问题?由于 glut 为 opengl 编程提供了除窗口处理功能之外的一些额外功能,那么将额外的工具包与 glut 相结合是否有意义?

【问题讨论】:

你想要在你的 openGL 窗口中使用类似游戏的窗口,还是在你的 openGL 窗口周围使用操作系统级别的窗口? 【参考方案1】:

我只能从使用QT的经验说起:

一旦你设置了基本结构,那么你就可以做你一直在做的事情了:例如,我目前正在处理的项目有一个嵌入在窗口中的 open gl 小部件。

这个小部件具有诸如 initializeGL、resize...paintGL 等功能。优点包括能够将变量从其他窗口/小部件等传递给东西,32d 的东西需要一些更复杂的数学)

【讨论】:

【参考方案2】:

如果您想要更复杂的控件和对话框等,您需要尽快摆脱过剩。

QT 有一个出色的openGL widget,在时事通讯中还有一篇关于drawing controls ontop of GL 的有趣文章,以提供酷炫的 WPF 样式效果。

wxWidgets 也自带opengl example,但我没有太多经验。

【讨论】:

【参考方案3】:

嗯 - 过剩是可以让原型运行。

这取决于操作系统,但稍后您可能想要阻止屏幕保护程序启动,您可能想要禁用任务开关(虽然只有坏人这样做),您可能想要对断电做出反应事件。您可能会发现 glut 无法处理一个或另一个操作系统上的死键,或者,或者,或者......您可能想摆脱它的原因有上千种。

这是一个框架,旨在让您轻松开始并完成您需要的 90% 的日常工作,但它永远无法做到 100%。您总是可以让自己陷入过剩或取消初始化代码,但有一天您会发现从头开始重新设计初始化代码并根据您的任务进行调整会更容易。

打开一个窗口并初始化 OpenGL 不是火箭科学。只要它对你有用,就使用过剩,但一旦它产生问题就摆脱它。它只需要你几个小时的时间,所以你不会失去太多。

不过,对于玩具项目来说,供过于求是必经之路。

【讨论】:

【参考方案4】:

SDL,虽然不只是一个窗口处理程序,但它使使用 OpenGL 比使用原始 Win32 代码更容易。不过,我在 Qt、GTK 和 wxWidgets 方面的经验并不算太差……当然不会比 Win32 好多少,在这些情况下可能只是个人喜好问题。

如果您想对窗口和资源进行精细控制,我建议您避免使用像 GLUT 这样的小部件和包装器,但如果您只是在寻找开发速度,那么这些工具是理想的选择。

【讨论】:

以上是关于opengl 的窗口处理程序的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenGL 和 SDL 处理窗口大小调整

OpenGL的GLUT事件处理(Event Processing)窗口管理(Window Management)函数[转]

opengl窗口超过分辨率

opengl刷新界面时要怎么阻止windows窗口重绘

OpenGL及GLUT---------------函数整理

OpenGL:如何设置 OpenGL 只渲染到 FBO,不输出到屏幕/窗口/控件?