我似乎无法在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
它在哪里?
答案 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的情况下调用glGenBuffers
,glBindBuffer
,glVertexAttribPointer
或任何openGL函数。
<强>更新强>:
某些OpenGL函数(如glVertexAttribDivisor
和glDrawElementsInstanced
)不适用于QGLFunctions
。这是因为QGLFunctions
仅提供特定于OpenGL / ES 2.0 API的功能,这些功能可能没有这些功能。
要解决此问题,您可以使用仅从Qt 5.1开始提供的QOpenGLFunctions_4_3_Core(或类似)。将QGLFunctions
替换为QOpenGLFunctions_4_3_Core
,将initializeGLFunctions()
替换为initializeOpenGLFunctions()
。
答案 1 :(得分:1)
查看您引用的示例的来源:
http://qt-project.org/doc/qt-5.0/qtopengl/cube-geometryengine-h.html
它有:
#include <QGLFunctions>
哪个有glGenBuffers
http://qt-project.org/doc/qt-5.0/qtopengl/qglfunctions.html
http://qt-project.org/doc/qt-5.0/qtopengl/qglfunctions.html#glGenBuffers
希望有所帮助!
答案 2 :(得分:1)
如果您将QT += opengl
添加到项目(.pro)文件中,您会发现无需指定要导入的每个标题的文件夹,和您将能够立即使用#include <QGLFunctions>
。
使用QGLFunctions
优于GLEW的优势在于,您确定您的应用程序可以在任何平台上编译,并且不依赖于系统中隐藏GLEW库的位置:Qt库将为您执行此操作。正如@phyatt所指出的,Qt的Cube示例是一个很好的例子,可以看到如何使用这个库。
答案 3 :(得分:0)
我在examples文件夹中找到了我的问题的答案。
具体来说,有必要复制名为glextensions.h
的标题,其功能类似于GLEW。
我最终使用了GLEW。