2011-05-09 73 views
0

我想使用的命令:的OpenGL - glBeginQuery沒有宣佈

glBeginQuery

glEndQuery

glGetQueryObjectiv

glGenQueries

但是編譯器給我」 ..was不聲明「

我使用linux和我有這些頭文件(這工作很好,直到現在)

  #include <GL/gl.h> 
      #include <GL/glu.h> 
      #include <GL/glut.h> 
      #include <GL/glx.h> 

      #include <X11/X.h>  
      #include <X11/keysym.h> 

有沒有解決方案呢?

回答

3

查詢函數在glext.h中聲明。請注意,包含此文件不會奇蹟般地初始化函數指針,也不會檢查功能的可用性(儘管1.5功能幾乎無處不在,但一個編寫良好的程序不能簡單地假定它工作正常)。您至少必須正確初始化指針,否則程序將崩潰並燒燬。

如果你不知道我說的是現在,或者如果你以任何方式不確定,下載GLEW。這會爲你節省很多痛苦。

編輯:關於它是如何工作的更詳細的解釋是:超越核心1.2(或相信Linux的1.3)的功能只能通過函數指針機制來實現。爲此,像glBeginQuery這樣的函數將有一個名爲PFNGLBEGINQUERYPROC的函數指針typedef,它用於初始化一個名爲glBeginQuery的靜態全局變量。你當然也可以自由地做其他任何事情(你可以把所有的函數指針放到一個結構體中,或者給它們愚蠢的名字),但這是最常用的。

您還必須檢查正確的版本和/或擴展的支持,否則你不知道你想要的功能是否在所有實施。

GLEW 做一切對你那麼它只是工作如果你這樣做:

#include <GL/glew.h> 
    ... 
if (glewInit() != GLEW_OK) 
    fail_with_error(); 

旁註:你可以glext.h定義GL_GLEXT_PROTOTYPES生成原型,但這不是非常有用,因爲它會導致鏈接器抱怨丟失的符號(實際上,我一直在想,爲什麼這會存在)。

+0

你好,我想包括,但仍然是相同的。(我已經GLEW從軟件倉庫安裝)。我想實現從一本書的例子。 – George 2011-05-09 09:22:10

+1

@George:確保包含GLEW頭並調用init函數,參見上面的更新回答。 – Damon 2011-05-09 09:39:01

+0

感謝您的幫助。使用glew.h它幾乎ok.Now,它給了我「未定義的引用'_glewBeginQuery」。它不承認glBeginQuery>我試圖刪除glut.h但我當然沒有識別代碼中的glut命令。所以,我使用glew我不能使用過剩? – George 2011-05-09 09:53:14