Where is glGenBuffers in Qt5?

别等时光非礼了梦想. 提交于 2020-01-14 13:18:26

问题


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?


回答1:


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().




回答2:


Looking at the source for the example you cited:

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

It has:

#include <QGLFunctions>

Which does have glGenBuffers

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

http://qt-project.org/doc/qt-5.0/qtopengl/qglfunctions.html#glGenBuffers

Hope that helps!




回答3:


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.




回答4:


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.



来源:https://stackoverflow.com/questions/15048729/where-is-glgenbuffers-in-qt5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!