0

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

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

它失败了。另一方面,当我通过类创建缓冲区和着色器时QGLBufferQGLShader缓冲区和着色器被正确创建,但只有片段着色器有效,顶点缓冲区什么也不做。解决办法是什么?GLEW如果重要的话,我通过扩展访问 OpenGL 版本>=2.0 功能/

4

1 回答 1

1

您说您通过GLEW访问高级 OpenGL 功能。那么您是否记得在获取 OpenGL 上下文(很可能作为第一个语句)后调用正确初始化GLEW?否则,必要的函数指针将无法正确设置,这确实会导致在调用.glewInit()initializeGL()glGenBuffers

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

于 2013-01-09T14:18:18.357 回答