繁体   English   中英

Qt5中的glGenBuffers在哪里?

[英]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() 例如,在QGLWidgetinitializeGL()在开始绘制任何内容之前被调用一次:

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

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

    // ...
}

现在你应该可以调用glGenBuffersglBindBufferglVertexAttribPointer或任何没有GLEW的openGL函数。

更新 :某些OpenGL函数(如glVertexAttribDivisorglDrawElementsInstanced不适用于QGLFunctions 这是因为QGLFunctions仅提供特定于OpenGL / ES 2.0 API的功能,这些功能可能没有这些功能。

要解决这个问题,您可以使用QtpenGLFunctions_4_3_Core (或类似版本),该版本仅在Qt 5.1之后可用。 QGLFunctions替换QGLFunctionsinitializeGLFunctions() initializeOpenGLFunctions() QOpenGLFunctions_4_3_Core initializeOpenGLFunctions()

如果将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM