2012-11-07 81 views
0

我目前正在基於OpenGL的Qt和試圖建立一個幀緩衝區對象使用以下調用幀緩衝區對象中的Qt不工作4.8.1

glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, scene_img, 0); 

當我嘗試編譯我的項目,我獲得以下錯誤:

Error: C2065: 'GL_FRAMEBUFFER_EXT' : undeclared identifier 

顯然名稱GL_FRAMEBUFFER_EXT不被任何標識。我嘗試導入QtOpenGL,QGLShaderProgram和QGLFramebufferObject沒有運氣。還是一樣的錯誤。我在ql.h中看了一下,仍然沒有運氣。還有什麼我必須導入?請注意,除了FRAMEBUFFER問題,我的正常QGLWidget沒有問題。

順便說一句:在Windows 7

回答

2

trying to create a framebuffer object using following call

glFramebufferTexture2DEXT(

工作不創建一個幀緩衝區對象。它將顏色分配爲顏色附件。

順便說一句,以EXT結尾的函數是不屬於核心功能的擴展函數。擴展通常從EXT到ARB,並可能成爲核心,但對API的重大更改可能會發生微妙的變化。

無論如何,即使OpenGL-1.1(Windows)或OpenGL-1.2(GLX)已成爲核心功能,也必須通過擴展機制來訪問。

最簡單的方式做到這一點:

  1. 下載GLEW從http://glew.sourceforge.net
  2. 後(每次)上下文創建與#include <GL/glew.h>
  3. 通話glewInit();替換的#include <GL/gl.h>所有出現
  4. 添加GLEW庫您的構建鏈接器設置。
+0

到目前爲止感謝。我做了你所說的一切。沒有我的應用程序不再抱怨了,但現在我只是得到一個錯誤返回碼。似乎我做錯了什麼或有不兼容的編譯器。 – anopheles

+0

好吧,我把它縮小到glewInit();我有多個視圖(QGLWidget的子類),我在每個initializeGL()調用中調用glewInit()。這是錯誤的,或者我應該如何使用glewInit()? – anopheles

+0

@ user1509533:是的,您必須爲每個上下文調用glewInit。如果這不起作用,請嘗試在每個「paintGL」的開頭添加glewInit()。如果這樣的話,你必須添加更多的代碼纔能有效(否則GLEW會重新加載所有函數指針,而不是使用緩存)。 – datenwolf