2011-12-30 30 views
2

我在linux上玩了一點opengl編程,我有些疑惑。OpenGL頭文件版本信息不匹配

的glxinfo讓我對OpenGL的版本如下:

的OpenGL版本字符串:2.1梅薩7.11

我想這意味着我的系統支持OpenGL 2.1使用Mesa實現。

然後,從/ usr/include中,我發現有點像,如果我看GL/gl.h:

#define GL_VERSION_1_1 1 
#define GL_VERSION_1_2 1 
#define GL_VERSION_1_3 1 
#define GL_ARB_imaging 1 

所以GL_VERSION_xx不是爲1.4,1.5,2.0定義。所以我的問題是,爲什麼頭文件不包括GL版本的定義(至少)2.0? 我應該用更合適的東西來更改GL/gl.h頭文件嗎?

有關信息,我使用的是標準的ubuntu linux安裝。這裏是一些從glxinfo更多的信息:

OpenGL vendor string: X.Org R300 Project 
OpenGL renderer string: Gallium 0.4 on ATI RV515 
OpenGL version string: 2.1 Mesa 7.11 
OpenGL shading language version string: 1.20 

弗朗西斯

回答

3

你需要真正實現了OpenGL版本,什麼是出現在頭文件之間的分離。 OpenGL頭文件的內容通常是某種最低公分母,因爲OpenGL有一個擴展系統。 OpenGL實現(也)通過擴展系統提供了它們的功能,這實際上是某種形式的動態庫鏈接。

這使得需要擴展功能的程序可以在系統中運行,而這些程序能夠以較低的能力正常退出,給出一些有用的錯誤消息而不是「libGL.so中所需的符號glShaderSource不會解決」,這可能會讓用戶感到困惑,甚至可以下降到兼容模式。

最簡單的方式來獲得更高的OpenGL版本功能是通過使用GLEW庫(http://glew.sourceforge.net),這歸結於包括GL/glew.h,而不是GL/gl.h和上下文創建後調用glewInit()

+0

因此,在頭文件中定義的GL_VERSION_X_X並不重要,因爲一切都是在運行時確定的?這似乎很奇怪,但我認爲你是對的... – Francesco 2011-12-30 15:50:30

+0

@Francesco:頭文件的GL_VERSION_X_X宏只是告訴你,你可以從頭文件中獲得哪些OpenGL符號(令牌和過程)。這個想法是,你添加了一些#ifndef宏,如果安裝的頭文件沒有包含編譯時所需的所有符號,它會在編譯時發出一些錯誤。 – datenwolf 2011-12-30 17:46:43