2011-04-14 144 views
1

我想在使用QGLWidget的項目中使用RBOs。現在,當我想使用RBO快速讀取紋理時,編譯器說'glGenRenderbuffersEXT'沒有在此範圍內聲明。與FBO(glGenFramebuffersEXT)相同的工作正常。glGenRenderbuffersEXT未聲明,但glGenFramebuffersEXT工作

GL的相關包括使用:

#include <GL/glew.h> 
#include <QtOpenGL> 

我對GLEW庫鏈接了。 這裏我的CMakeLists.txt的轉儲:

include_directories(
    ${GLEW_INCLUDE_PATH} 
    ${PROJECT_SOURCE_DIR}/include 
    ${OpenCV_INCLUDE_DIRS} 
    ${CG_INCLUDE_PATH} 
) 

set(LIBS 
    ${GLEW_LIBRARY} 
    ${OPENGL_gl_LIBRARY} 
    ${OPENGL_glu_LIBRARY} 
    ${CG_LIBRARY} 
    ${CG_GL_LIBRARY} 
    ${OpenCV_LIBS} 
    ${GFlags_LIBS} 
    ${QT_LIBRARIES} 
    common 
    ndiolib 
    optimization-static 
    LightingLib-static 
) 

SOURCE_GROUP("Shader Files" FILES ${SHADER_FILES}) 

add_executable(Relighting ${HDRS} ${SRCS} ${MOCSRC} ${SHADER_FILES} main.cxx) 
target_link_libraries(Project ${LIBS}) 

任何人有一個想法,可能是什麼問題?當我嘗試使用glext.h(+ gl.h)而不是glew.h時,無法找到RBO和FBO。

附加問題:我應該使用RBO讀出紋理嗎?或者,使用我用來讀出紋理的FBO同樣快?

回答

2

我檢查OpenGL網站,似乎你提到的功能只有在你定義了GL_GLEXT_PROTOTYPES時才被定義。

http://www.opengl.org/registry/api/glext.h

進一步深挖表明你確實需要以使用擴展的原型來定義這個符號。

http://www.opengl.org/registry/ABI/#5

+0

謝謝你,這有助於!以爲我不需要使用glew ... – Guanta 2011-04-14 19:36:32

+1

如果你使用glext而不是glew,你只需要定義GL_GLEXT_PROTOTYPES。但是如果你使用glew,你必須調用glewInit()! – Guanta 2011-04-19 16:01:54