2015-04-02 80 views
1

我试图让GTK + 3.16的新GLArea小部件工作。它旨在提供内置的OpenGL支持而不依赖于过时的GtkGLExt/GtkGLArea项目。由于我不愿意将我的工作发布更新到Gnome 3.16,所以我使用Gnome Box在虚拟机上安装了Fedora 22 Alpha。GtkGLArea:找不到GL_ARB_create_context_profile扩展

ebassi's blog post我添加了一个GLArea孩子我的窗口UI文件:

<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代码是打算进入一个C函数,我会从gl_draw Vala方法调用。目前,三个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

您提供的'glxinfo'输出没有_not_ list GLX_ARB_create_context_profile'可用。你的服务器显然缺乏对此的支持。基本上,您只能同时使用客户端和服务器支持的内容。这也是为什么'glxinfo'在“server glx extensions”和“client glx extensions”之后明确列出“GLX扩展”的原因。 – derhass 2015-04-02 15:24:13

回答

2

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

即使您看到扩展名,由于GTK +使用的最低版本(即3.2)的要求,您可能无法创建适当的GLX上下文; Mesa的llvmpipe软件光栅化程序不完全支持OpenGL 3.2,因为某些所需的扩展程序已被专利覆盖。详情请见bug 744407,以及未来的计划。另外:通常,能够运行glxgears不是能够使用OpenGL的指示 - 除了非常古老的1.x固定管线API之外。就像它不是一个OpenGL基准测试一样,我担心,glxgears不是一个很好的OpenGL可用性指标。

+0

那很不幸;在这种情况下,我将不得不考虑将我的主机升级到Gnome 3.16。首先非常感谢这个答案和你的博客文章。我对OpenGL和Gtk相当陌生,关于我仍然不明白的机制有很多。为什么我能够运行GNOME/gtkglarea回购的例子呢? – Jonas 2015-04-02 12:35:21

+0

gtkglarea是一个古老的图书馆;原始代码使用GTK + 2,并且最近有一个GTK + 3端口。该端口使用不推荐使用的API,未与GTK绘图周期集成(因此它利用了可能在任何时候都会中断的未定义行为),并且仍基于不推荐使用的传统GL上下文。对于GTK + 3.16,我们决定不支持旧版和核心GL配置文件,因为它无法可靠地检测到用户将要使用的内容。希望Mesa很快就会被解决。 – ebassi 2015-04-02 18:17:00

+0

我明白了。我没有意识到这是旧的GtkGLArea。这有点混乱地命名。再次感谢。我在我的机器上创建了一个新用户并[通过JHBuild安装了Gnome 3.16](https://developer.gnome.org/jhbuild/stable/jhbuild-and-gnome.html.en),现在它可以工作。 – Jonas 2015-04-04 13:07:34