将现有的C++ OpenGL项目从glut/freeglut转换为glfw

6
我想将我的科学 3D 应用程序从 Freeglut 升级到 GLFW,但我担心会出现隐藏的冲突或数据丢失。事实上,我的应用程序在 Freeglut 下运行得非常好,我没有任何问题,但是所有现代图书和教程都推荐使用 GLFW 来进行现代 OpenGL(3.0+)开发。
我看了一下 GLFW 的 API,它看起来像是带有“glfw*”前缀的 Glut,但我不是很确定。所以我有三个问题:
1. 是否值得为了 GLFW 而破坏我的现有项目,还是坚持使用 freeglut? 2. 我是否会失去 glut 的任何功能? 3. GLFW 是否与 GTK+ 兼容?(因为我的 GUI 基于 GTK)

3
如果您的显卡支持,我认为您完全可以使用OpenGL 3.0+和FreeGLUT,这应该不会有任何问题。 - BЈовић
1
从对GLFW的了解中,我发现它比freeglut提供了更多的选项。我猜这就是原因,但不确定。 - BЈовић
2
Freeglut完全支持OpenGL3。只需执行glutInitContextVersion(3, 2); glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);,你就可以开始编程了。 - R. Martinho Fernandes
1个回答

3

3- GLFW 是否与 GTK+ 兼容?(因为我的 GUI 基于 GTK)

如果你使用 GTK+,则不应该同时使用 Free-/GLUT 或 GLFW。GTK+ 已经有一个 OpenGL 小部件并管理所有事件。请使用它。


@Ndv 请记住,GLFW(就像freeglut一样)只是一个GUI库(就像GTK+),与OpenGL没有任何关系。 - Christian Rau
2
@Ndv 如果你想自己处理它,那么你就需要使用平台自己的API(如win的wgl,nix的glX)来管理OpenGL上下文。否则,GLFW/GLUT与GTK+之间没有争议,因为它们都只是平台特定的OpenGL和GUI管理包装器,使它们成为支持OpenGL上下文管理的GUI库而已。在这方面,GLFW/GLUT和GTK+处于完全相同的抽象级别。再次强调:GLFW/GLUT与OpenGL没有任何关系,就像GTK+一样。 - Christian Rau
@Ndv:我完全同意Christian Rau的观点;GLUT和GLFW并不是低级别的。你想看低级别的东西吗?那就看看https://github.com/datenwolf/codesamples/tree/master/samples/OpenGL/x11argb_opengl吧。 - datenwolf
@Ndv 好的,上下文、窗口和输入管理功能就可以制作GUI库。这很容易。如果你不想基于GUI库编写系统(这是个好主意),那么只需分离关注点。对于GTK+和GLUT/GLFW,你必须做到这一点,因为GLUT/GLFW与OpenGL没有任何关系。抱歉重复了,但这是人们经常忘记的关键事实。因此,用OpenGL而不是GLFW/GLUT/GTK+编写你的系统。 - Christian Rau
@Ndv 嗯,证明相反的观点。那么我可能会有话要说。但在那之前,真的没有什么可说的了,除了 **GLUT/GLFW 没有...**。好吧,我想你终于明白了。 - Christian Rau
1
@Ndv 好的,那我道歉。第三个问题的答案就是 不行。这两个完全不同的库做着相同的事情。使你的代码同时适用于它们的唯一方法就是不依赖于任何一个库。使用GLFW为GTK+窗口创建上下文肯定是不会起作用的。GLFW(像GLUT一样)与GTK+不兼容,就像Qt或MFC一样。没有人会试图在一个项目中混合它们,如果你的代码/库要同时使用它们,那么就不要依赖它们。我不认为这是一场争吵。我不持任何一方立场,相反,我想澄清它们都是平等的,不能混合使用。 - Christian Rau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接