[英]Where is glGenBuffers in Qt5?
我似乎无法在glGenBuffer
中找到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
它在哪里?
我知道我迟到了,但这是一个更优雅的解决方案(你不需要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);
// ...
}
现在你应该可以调用glGenBuffers
, glBindBuffer
, glVertexAttribPointer
或任何没有GLEW的openGL函数。
更新 :某些OpenGL函数(如glVertexAttribDivisor
和glDrawElementsInstanced
不适用于QGLFunctions
。 这是因为QGLFunctions
仅提供特定于OpenGL / ES 2.0 API的功能,这些功能可能没有这些功能。
要解决这个问题,您可以使用QtpenGLFunctions_4_3_Core (或类似版本),该版本仅在Qt 5.1之后可用。 用QGLFunctions
替换QGLFunctions
用initializeGLFunctions()
initializeOpenGLFunctions()
QOpenGLFunctions_4_3_Core
initializeOpenGLFunctions()
。
查看您引用的示例的来源:
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
希望有所帮助!
如果将QT += opengl
添加到项目(.pro)文件中,您将发现不需要指定要导入的每个标题的文件夹, 并且您将能够使用#include <QGLFunctions>
right远。
使用QGLFunctions
比GLEW更有优势的是,您确定您的应用程序可以在任何平台上编译,并且不依赖于系统中隐藏GLEW库的位置:Qt库将为您执行此操作。 正如@phyatt所指出的,Qt的Cube示例是一个很好的例子,可以看到如何使用这个库。
我在examples文件夹中找到了我的问题的答案。
具体来说,有必要复制一个名为glextensions.h
的头glextensions.h
,其功能类似于GLEW。
我最终使用了GLEW。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.