我将使用QT编写一个OpenGL应用程序作为窗口优化。但我有一些问题。
当我尝试使用OpenGL版本> = 2.0功能,如着色器和缓冲对象时,我的应用程序崩溃了。我使用QGLWidget
作为渲染小部件,这是我的代码的一部分:
void RenderingWidget::initializeGL()
{
GLuint buffer_id;
glGenBuffers(...)
.
.
.
}
它失败了。
另一方面,当我通过QGLBuffer
和QGLShader
类创建缓冲区和着色器时,缓冲区和着色器正确创建,但只有片段着色器工作,顶点缓冲区不执行任何操作。解决办法是什么?
如果我通过GLEW
extensions /
答案 0 :(得分:1)
您说您通过 GLEW 访问高级OpenGL功能。所以你记得在获得OpenGL上下文之后通过调用glewInit()
来正确初始化 GLEW (很可能是initializeGL()
中的第一个语句)?否则,将不会正确设置必要的函数指针,这在调用glGenBuffers
等函数时确实会导致某种访问冲突或空指针取消引用。
另一方面,Qt在内部进行自己的手动扩展管理,而不使用 GLEW 或其他任何东西,这就是缓冲或着色器管理的Qt功能正常工作的原因。