2015-04-02 107 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