Where is glGenBuffers in Qt5?

2019-06-24 04:14发布

I can't seem to find the glGenBuffer function in Qt5, my include list looks like

#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>

I am trying to do something like the following example:

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

Where is it?

4条回答
放荡不羁爱自由
2楼-- · 2019-06-24 04:28

I know I'm late, but here's a more elegant solution (you don't need GLEW =))

in addition to making sure you have QT += opengl in your *.pro file, and that your version of Qt has OpenGL, and that you have #include <QGLFunctions> (you don't need all of those includes that you listed down above; just this one line) in your header file, you need one more thing.

So given you have a class that calls all these functions:

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

You need to inherit a protected class QGLFunctions:

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

ALSO, just as GLEW required glewInit() to be called once before you call the OpenGL functions, QGLFunctions requires you to call initializeGLFunctions(). So for example, in QGLWidget, initializeGL() is called once before it starts drawing anything:

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

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

    // ...
}

Now you should be able to call glGenBuffers, glBindBuffer, glVertexAttribPointer or whatever openGL function without GLEW.

UPDATE: Certain OpenGL functions like glVertexAttribDivisor and glDrawElementsInstanced do not work with QGLFunctions. This is because QGLFunctions only provides functions specific to OpenGL/ES 2.0 API, which may not have these features.

To work around this you could use QOpenGLFunctions_4_3_Core(or similar) which is only available since Qt 5.1. Replace QGLFunctions with QOpenGLFunctions_4_3_Core, and initializeGLFunctions() with initializeOpenGLFunctions().

查看更多
家丑人穷心不美
3楼-- · 2019-06-24 04:28

I found an answer to my question in the examples folder.

Specifically, it was necessary to copy a header called glextensions.h which functions like GLEW.

I ended up using GLEW.

查看更多
该账号已被封号
4楼-- · 2019-06-24 04:38

If you add QT += opengl to your project (.pro) file, you will find that you don't need to specify the folder of each header you're importing, and you will be able to use #include <QGLFunctions> right away.

The advantage of using QGLFunctions over GLEW is that you are sure your application can be compiled on any platform and will not depend on where on your system your GLEW libraries are hidden: the Qt libraries will do this for you. As @phyatt pointed out, Qt's Cube example is a good example to see how to use this library.

查看更多
forever°为你锁心
5楼-- · 2019-06-24 04:47
登录 后发表回答