qt - Qt5 中的 glGenBuffers 在哪里?

标签 qt opengl opengl-es qt5

我似乎找不到 glGenBuffer Qt5 中的函数,我的包含列表看起来像

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

除了确保您拥有 QT += opengl在您的 *.pro 文件中,并且您的 Qt 版本具有 OpenGL,并且您具有 #include <QGLFunctions> (您不需要上面列出的所有这些内容;只需这一行)在您的头文件中,您还需要一件事。

因此,假设您有一个调用所有这些函数的类:

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

你需要继承一个 protected 类QGLFunctions :
class MeGlWindow : public QGLWidget, protected QGLFunctions // add QGLFunctions
{
   // bla bla bla...
}

同样,正如 GLEW 所要求的 glewInit()在调用 OpenGL 函数之前调用一次,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 函数,如 glVertexAttribDivisorglDrawElementsInstanced不使用 QGLFunctions .这是因为 QGLFunctions仅提供特定于 OpenGL/ES 2.0 API 的功能,可能没有这些功能。

要解决此问题,您可以使用 QOpenGLFunctions_4_3_Core (或类似的)仅在 Qt 5.1 之后才可用。替换 QGLFunctionsQOpenGLFunctions_4_3_Core , 和 initializeGLFunctions()initializeOpenGLFunctions() .

关于qt - Qt5 中的 glGenBuffers 在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15048729/

相关文章:

OpenGL/OpenTK 填充内部空间

性能 - 在 opengl 中绘制许多 2d 圆

c++ - 当我在我的 xcode 项目中使用 #include <OpenGL/gl.h> 行时,它在哪里寻找 gl.h 文件?

ios - iOS 上的着色器差异

c++ - 为什么 CLion 可以正确构建和链接 Qt,但不能运行我的可执行文件?

Qt + gif + alpha

c++ - 带有 XML 的 TCP 消息结构

c++ - 没有收到来自 parent 的 moveEvent?

java - GLSurfaceView/SurfaceView 重叠

iphone - iPhone 和其他 OpenGL ES 平台上的非阻塞纹理上传