GtKGLArea 无法创建 OpenGL 2.1 上下文

Posted

技术标签:

【中文标题】GtKGLArea 无法创建 OpenGL 2.1 上下文【英文标题】:GtKGLArea unable to create OpenGL 2.1 context 【发布时间】:2016-06-19 15:54:55 【问题描述】:

我目前正在为我的游戏引擎项目开发一个简单的编辑器,而该项目似乎在我的主工作站上运行得很好(支持 OpenGL 3.3+ 的 GTX 650Ti),但在我测试时它似乎坏了它在我的测试桌面上(最大支持 OpenGL 2.1 的 GMA4500)。

即使我用gtk_gl_area_set_required_version() 将GL 版本指定为2.1,GtkGLArea 的gtk_gl_area_make_current() 也无法创建OpenGL 2.1 上下文。

尝试通过测试 gtk glarea 演示 (https://git.gnome.org/browse/gtk+/tree/demos/gtk-demo/glarea.c) 对其进行故障排除并获得相同的结果。

已经在网上搜索过,但没有找到任何解决方案。尽管有人在 ebassi (https://github.com/ebassi/glarea-example/issues/2) 的 glarea 示例中提到了相同的确切问题

有什么解决办法吗?

操作系统:Fedora 23 GTK 3.18 版


编辑: 操作系统(Fedora 23)正在使用 OpenGL 2.1(通过 glxinfo 检查),并且考虑到 GTK+ 源上给出的演示,我假设 GTK 默认使用 GL 3.0+。 有什么办法可以忽略这一点吗?(根据 ebassi 在下面的回答,如果核心配置文件不可用,从 GTK+ 3.20 GdkGLContext 开始将退回到旧配置文件。我会尽快对其进行测试升级到 GTK+ 3.20)

编辑 2: 我可以通过使用 SDL 创建的上下文而不是 GdkGLContext 来解决问题,但我仍然有兴趣让 GdkGLContext 与 OpenGL 2.1 一起使用。

【问题讨论】:

这个问题可能不属于 SO,因为它听起来更像是一个操作系统问题,但是您是否尝试过运行 glxinfo?它应该告诉您您的操作系统实际使用的版本。另外,您能否更具体地了解确切的错误、行为、响应等。 操作系统使用 OGL 2.1,默认上下文创建在其他库(glfw、wxWidget 和 qt)上运行良好。所以我不认为这是由操作系统引起的问题。 好吧,如果不是操作系统问题,我们需要知道确切的行为。 【参考方案1】:

GTK+ 尝试默认创建 OpenGL 3.2+ 核心配置文件上下文。

从 GTK+ 3.20 开始,如果核心配置文件不可用,GdkGLContext 将尝试回退到旧配置文件。您可以使用gdk_gl_context_is_legacy() 检查GdkGLContext 是否处于旧模式。

您不能自行选择旧版上下文,因为无法与旧版共享核心配置文件,并且 GDK 会在内部创建 GL 上下文以进行绘图。

【讨论】:

感谢您的参考,我想我会先尝试将 GTK+ 升级到 3.20,看看我是否可以在 GdkGLContext 上使用旧模式【参考方案2】:

您可以使用 EGL 来使用带有 GtkDrawingArea 的旧版(3.0 之前)OpenGL 版本

http://bobthegnome.blogspot.com/2014/09/using-egl-with-gtk.html

【讨论】:

以上是关于GtKGLArea 无法创建 OpenGL 2.1 上下文的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenGL 编译 GTK+

为啥使用 GTKGLArea 时在 PyOpenGL 中未定义 glGenVertexArrays

GtkGLArea 清除背景但不绘制

SDL 无法创建 OpenGL 窗口

带有 QT 错误的 OpenGL:断言:“QOpenGLFunctions::isInitialized(d_ptr)”。无法创建 OpenGL 上下文

Qt & OpenGL:如何强制使用 OpenGL 2.1?