OpenGL缓冲区和Qt OpenGL模块

时间:2013-01-09 13:32:08

标签: qt opengl glew

我将使用QT编写一个OpenGL应用程序作为窗口优化。但我有一些问题。 当我尝试使用OpenGL版本> = 2.0功能,如着色器和缓冲对象时,我的应用程序崩溃了。我使用QGLWidget作为渲染小部件,这是我的代码的一部分:

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

它失败了。 另一方面,当我通过QGLBufferQGLShader类创建缓冲区和着色器时,缓冲区和着色器正确创建,但只有片段着色器工作,顶点缓冲区不执行任何操作。解决办法是什么? 如果我通过GLEW extensions /

访问OpenGL版本> = 2.0功能

1 个答案:

答案 0 :(得分:1)

您说您通过 GLEW 访问高级OpenGL功能。所以你记得在获得OpenGL上下文之后通过调用glewInit()来正确初始化 GLEW (很可能是initializeGL()中的第一个语句)?否则,将不会正确设置必要的函数指针,这在调用glGenBuffers等函数时确实会导致某种访问冲突或空指针取消引用。

另一方面,Qt在内部进行自己的手动扩展管理,而不使用 GLEW 或其他任何东西,这就是缓冲或着色器管理的Qt功能正常工作的原因。