GtkGLArea:GL_ARB_create_context_profile 未找到扩展
GtkGLArea: GL_ARB_create_context_profile extension not found
我正在尝试让 GTK+ 3.16 的新 GLArea 小部件工作。它旨在提供内置的 OpenGL 支持 w/o 依赖于过时的 GtkGLExt/GtkGLArea 项目。由于我还不愿意将我的工作发行版更新到 Gnome 3.16,所以我使用 Gnome Boxes 在虚拟机上安装了 Fedora 22 Alpha。
在 ebassi's blog post 之后,我在我的 window UI 文件中添加了一个 GLArea 子项:
<child>
<object class="GtkGLArea" id="gl_drawing_area">
<signal name="realize" handler="gl_init" swapped="yes"/>
<signal name="unrealize" handler="gl_fini" swapped="yes"/>
<signal name="render" handler="gl_draw" swapped="yes"/>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
</object>
</child>
并连接信号。我应该说我正在为我的 UI 代码使用 Vala。实际的 OpenGL 代码旨在进入我将从 gl_draw
Vala 方法调用的 C 函数。现在,三个 Vala 函数只打印它们的名字。
的确,gl_init
和 gl_fini
被调用了。但是 GLArea 小部件显示此错误消息:
The GLX_ARB_create_context_profile extension needed to create core profiles is not available
我也试过 运行 ebassi 自己的 example program (GitHub)。它甚至不显示 UI 但输出
glarea: Couldn't find current GLX or EGL context.
马上在终端上。
但是,运行ning glxinfo
告诉我我安装了那个扩展:
name of display: :0
display: :0 screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_texture_from_pixmap,
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer,
GLX_OML_swap_method, GLX_SGIS_multisample, GLX_SGIX_fbconfig,
GLX_SGIX_pbuffer, GLX_SGI_make_current_read
client glx vendor string: Mesa Project and SGI
client glx version string: 1.4
client glx extensions:
GLX_ARB_create_context, GLX_ARB_create_context_profile,
GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float,
GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample,
GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile,
...
glxgears
也 运行 没有问题。
此外,我克隆了 GNOME/gtkglarea repo in Github,自己编译,运行 示例没有任何问题。 我了解这个项目在正式包含在 GTK 中之前开发了 GLArea 小部件?(我错了。)
运行 在虚拟化环境下总是相当棘手。
即使您看到扩展,您也可能无法创建正确的 GLX 上下文,因为 GTK+ 使用的最低版本(即 3.2)有要求; Mesa 中的 llvmpipe 软件光栅化器并不完全支持 OpenGL 3.2,因为一些必需的扩展已包含在专利中。有关详细信息以及未来的计划,请参阅 bug 744407。
顺便说一句:通常,能够 运行 glxgears
并不表示能够使用 OpenGL — 除了非常古老的 1.x 固定管道 API.就像它不是 OpenGL 基准测试一样,glxgears
恐怕不是 OpenGL 可用性的良好指标。
我正在尝试让 GTK+ 3.16 的新 GLArea 小部件工作。它旨在提供内置的 OpenGL 支持 w/o 依赖于过时的 GtkGLExt/GtkGLArea 项目。由于我还不愿意将我的工作发行版更新到 Gnome 3.16,所以我使用 Gnome Boxes 在虚拟机上安装了 Fedora 22 Alpha。
在 ebassi's blog post 之后,我在我的 window UI 文件中添加了一个 GLArea 子项:
<child>
<object class="GtkGLArea" id="gl_drawing_area">
<signal name="realize" handler="gl_init" swapped="yes"/>
<signal name="unrealize" handler="gl_fini" swapped="yes"/>
<signal name="render" handler="gl_draw" swapped="yes"/>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
</object>
</child>
并连接信号。我应该说我正在为我的 UI 代码使用 Vala。实际的 OpenGL 代码旨在进入我将从 gl_draw
Vala 方法调用的 C 函数。现在,三个 Vala 函数只打印它们的名字。
的确,gl_init
和 gl_fini
被调用了。但是 GLArea 小部件显示此错误消息:
The GLX_ARB_create_context_profile extension needed to create core profiles is not available
我也试过 运行 ebassi 自己的 example program (GitHub)。它甚至不显示 UI 但输出
glarea: Couldn't find current GLX or EGL context.
马上在终端上。
但是,运行ning glxinfo
告诉我我安装了那个扩展:
name of display: :0
display: :0 screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_texture_from_pixmap,
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer,
GLX_OML_swap_method, GLX_SGIS_multisample, GLX_SGIX_fbconfig,
GLX_SGIX_pbuffer, GLX_SGI_make_current_read
client glx vendor string: Mesa Project and SGI
client glx version string: 1.4
client glx extensions:
GLX_ARB_create_context, GLX_ARB_create_context_profile,
GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float,
GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample,
GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile,
...
glxgears
也 运行 没有问题。
此外,我克隆了 GNOME/gtkglarea repo in Github,自己编译,运行 示例没有任何问题。 我了解这个项目在正式包含在 GTK 中之前开发了 GLArea 小部件?(我错了。)
运行 在虚拟化环境下总是相当棘手。
即使您看到扩展,您也可能无法创建正确的 GLX 上下文,因为 GTK+ 使用的最低版本(即 3.2)有要求; Mesa 中的 llvmpipe 软件光栅化器并不完全支持 OpenGL 3.2,因为一些必需的扩展已包含在专利中。有关详细信息以及未来的计划,请参阅 bug 744407。
顺便说一句:通常,能够 运行 glxgears
并不表示能够使用 OpenGL — 除了非常古老的 1.x 固定管道 API.就像它不是 OpenGL 基准测试一样,glxgears
恐怕不是 OpenGL 可用性的良好指标。