我知道我迟到了,但这里有一个更优雅的解决方案(你不需要 GLEW =))
除了确保您QT += opengl
的 *.pro 文件中有,并且您的 Qt 版本有 OpenGL,并且您有#include <QGLFunctions>
(您不需要上面列出的所有这些;只需这一行)头文件,你还需要一件事。
因此,假设您有一个调用所有这些函数的类:
class MeGlWindow : public QGLWidget
{
// bla bla bla...
}
您需要继承一个受保护的类QGLFunctions:
class MeGlWindow : public QGLWidget, protected QGLFunctions // add QGLFunctions
{
// bla bla bla...
}
glewInit()
此外,就像在调用 OpenGL 函数之前需要调用一次 GLEW 一样,QGLFunctions
需要调用initializeGLFunctions()
. 例如, in QGLWidget
,initializeGL()
在开始绘制任何东西之前被调用一次:
void MeGlWindow::initializeGL()
{
initializeGLFunctions();
// ...now you can call your OpenGL functions!
GLuint myBufferID;
glGenBuffers(1, &myBufferID);
// ...
}
现在您应该能够在没有 GLEW 的情况下调用、glGenBuffers
或任何 openGL 函数。glBindBuffer
glVertexAttribPointer
更新: 某些 OpenGL 函数喜欢glVertexAttribDivisor
和glDrawElementsInstanced
不使用QGLFunctions
。这是因为QGLFunctions
只提供 OpenGL/ES 2.0 API 特有的功能,可能没有这些功能。
要解决这个问题,您可以使用QOpenGLFunctions_4_3_Core(或类似的),它仅在 Qt 5.1 之后才可用。替换QGLFunctions
为QOpenGLFunctions_4_3_Core
和。initializeGLFunctions()
_initializeOpenGLFunctions()