Qt5中的glGenBuffers在哪里?

Mik*_*ail 4 opengl qt opengl-es qt5

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

#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>
Run Code Online (Sandbox Code Playgroud)

我想尝试做类似下面的例子:

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

它在哪里?

bru*_*ors 6

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

除了确保你QT += opengl的*.pro文件,以及你的Qt版本有OpenGL,并且你有#include <QGLFunctions>(你不需要所有这些包括你在上面列出的那些;只有这一行)头文件,你还需要一件事.

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

class MeGlWindow : public QGLWidget
{
   // bla bla bla...
}
Run Code Online (Sandbox Code Playgroud)

您需要继承受保护的类QGLFunctions:

class MeGlWindow : public QGLWidget, protected QGLFunctions // add QGLFunctions
{
   // bla bla bla...
}
Run Code Online (Sandbox Code Playgroud)

同样,就像glewInit()在调用OpenGL函数之前需要调用GLEW一样,QGLFunctions需要你调用initializeGLFunctions().因此,例如,在QGLWidget,initializeGL()在它开始画任何东西之前调用一次:

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

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

    // ...
}
Run Code Online (Sandbox Code Playgroud)

现在,你应该能够调用glGenBuffers,glBindBuffer,glVertexAttribPointer或任何openGL的功能,无需GLEW.

更新:某些OpenGL函数喜欢glVertexAttribDivisorglDrawElementsInstanced不兼容QGLFunctions.这是因为QGLFunctions仅提供特定于OpenGL/ES 2.0 API的功能,这些功能可能没有这些功能.

要解决这个问题,您可以使用QtpenGLFunctions_4_3_Core(或类似版本),该版本仅在Qt 5.1之后可用.更换QGLFunctionsQOpenGLFunctions_4_3_Core,并initializeGLFunctions()initializeOpenGLFunctions().