GtkGLArea:找不到GL_ARB_create_context_profile扩展名

时间:2015-04-02 11:09:29

标签: opengl gtk gtk3 glx

我试图让GTK + 3.16的新GLArea小部件正常工作。它旨在提供内置的OpenGL支持,而不依赖于过时的GtkGLExt / GtkGLArea项目。由于我还不愿意将我的工作分发版更新到Gnome 3.16,我使用Gnome Boxes在虚拟机上安装了Fedora 22 Alpha。

关注ebassi's blog post我在窗口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>

并连接信号。我应该说我使用Vala作为我的UI代码。实际的OpenGL代码旨在进入我将从gl_draw Vala方法调用的C函数。目前,三个Vala函数只是打印它们的名字。

确实,gl_initgl_fini被调用。但是GLArea小部件显示以下错误消息:

  

创建核心配置文件所需的GLX_ARB_create_context_profile扩展名不可用

我还试图运行ebassi自己的example program (GitHub)。它甚至不显示UI但输出

  

glarea:无法找到当前的GLX或EGL背景。

立即在终端上。

然而,运行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小部件吗?(我错了。)

1 个答案:

答案 0 :(得分:2)

在虚拟化环境下运行总是相当棘手。

即使您看到扩展程序,由于要求GTK +使用的最低版本(即3.2),您可能无法创建正确的GLX上下文; Mesa中的llvmpipe软件光栅化器并不完全支持OpenGL 3.2,因为专利涵盖了一些必需的扩展。有关详细信息以及未来的计划,请参阅bug 744407

顺便说一下:通常,能够运行glxgears并不表示能够使用OpenGL - 除了非常旧的1.x固定管道API。就像它不是OpenGL基准测试一样,glxgears不是OpenGL可用性的良好指标,我担心。