Qt5中的glGenBuffers在哪里?

时间:2013-02-24 04:38:06

标签: qt opengl opengl-es qt5

我似乎无法在Qt5中找到glGenBuffer函数,我的包含列表看起来像

#include <QtOpenGL/qgl.h>
#include <QtOpenGL/qglbuffer.h>
#include <QtOpenGL/qglcolormap.h>
#include <QtOpenGL/qglframebufferobject.h>
#include <QtOpenGL/qglfunctions.h>
#include <QtOpenGL/qglpixelbuffer.h>
#include <QtOpenGL/qglshaderprogram.h>
#include <GL/GLU.h>

我正在尝试做类似以下示例的事情:

http://qt-project.org/doc/qt-5.0/qtopengl/cube.html

它在哪里?

4 个答案:

答案 0 :(得分:6)

我知道我迟到了,但这是一个更优雅的解决方案(你不需要GLEW =))

除了确保您的* .pro文件中包含QT += opengl,并且您的Qt版本具有OpenGL,并且您拥有#include <QGLFunctions>(您不需要全部

,在你的头文件中包括你在上面列出的那些;只有这一行)

所以假设你有一个调用所有这些函数的类:

class MeGlWindow : public QGLWidget
{
   // bla bla bla...
}

您需要继承受保护的类QGLFunctions

class MeGlWindow : public QGLWidget, protected QGLFunctions // add QGLFunctions
{
   // bla bla bla...
}

另外,就像GLEW在调用OpenGL函数之前需要调用glewInit()一样,QGLFunctions要求您调用initializeGLFunctions()。例如,在QGLWidget中,initializeGL()在开始绘制任何内容之前被调用一次:

void MeGlWindow::initializeGL()
{
    initializeGLFunctions();

    // ...now you can call your OpenGL functions!
    GLuint myBufferID;
    glGenBuffers(1, &myBufferID);

    // ...
}

现在,您应该可以在没有GLEW的情况下调用glGenBuffersglBindBufferglVertexAttribPointer或任何openGL函数。

<强>更新: 某些OpenGL函数(如glVertexAttribDivisorglDrawElementsInstanced)不适用于QGLFunctions。这是因为QGLFunctions仅提供特定于OpenGL / ES 2.0 API的功能,这些功能可能没有这些功能。

要解决此问题,您可以使用仅从Qt 5.1开始提供的QOpenGLFunctions_4_3_Core(或类似)。将QGLFunctions替换为QOpenGLFunctions_4_3_Core,将initializeGLFunctions()替换为initializeOpenGLFunctions()

答案 1 :(得分:1)

答案 2 :(得分:1)

如果您将QT += opengl添加到项目(.pro)文件中,您会发现无需指定要导入的每个标题的文件夹,您将能够立即使用#include <QGLFunctions>

使用QGLFunctions优于GLEW的优势在于,您确定您的应用程序可以在任何平台上编译,并且不依赖于系统中隐藏GLEW库的位置:Qt库将为您执行此操作。正如@phyatt所指出的,Qt的Cube示例是一个很好的例子,可以看到如何使用这个库。

答案 3 :(得分:0)

我在examples文件夹中找到了我的问题的答案。

具体来说,有必要复制名为glextensions.h的标题,其功能类似于GLEW。

我最终使用了GLEW。