2011-04-14 145 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