2013-01-09 40 views
0

我将使用QT编写一个OpenGL应用程序作为窗口的通用性。但我有一些问题。 当我试图使用OpenGL版本> = 2.0功能,如着色器和缓冲区对象,我的应用程序切割。我用的是QGLWidget渲染插件,这是我的代码snipet:OpenGL缓冲区和Qt OpenGL模块

void RenderingWidget::initializeGL() 
{ 
    GLuint buffer_id; 
    glGenBuffers(...) 
      . 
      . 
      . 
} 

和失败。当我通过QGLBuffer和创建缓冲区和着色器,缓冲区和着色器被正确创建,但只有片段着色器工作和顶点缓冲区什么也不做。解决办法是什么? 如果问题我通过GLEW扩展/

回答

1

访问OpenGL的版本> = 2.0的功能你说你通过访问高级OpenGL功能GLEW。那么你是否记得在获得OpenGL上下文之后通过调用glewInit()来正确初始化GLEW(最有可能作为initializeGL()中的第一条语句)?否则,必要的函数指针将不会正确设置,这在调用glGenBuffers等函数时的确会导致某种访问冲突或空指针取消引用。另一方面,Qt在内部执行自己的手动扩展管理,而不使用GLEW或其他任何东西,这就是为什么Qt的缓冲区或着色器管理功能正常工作的原因。