【问题标题】:Load OpenGL function pointers using glad withing a QOpenGLWidget使用 QOpenGLWidget 加载 OpenGL 函数指针
【发布时间】:2017-07-07 10:16:32
【问题描述】:

所以我正在阅读一些 OpenGL,我想使用 QOpenGLWidget 进行绘图,以便以后创建一些其他有用的 UI 元素。我正在使用glad 来解析指向 OpenGL 的函数指针,但我不知道如何使用 Qt 的 getProcAddress 函数!

在我尝试过的 QOpenGLWidget 子类'initializeGL() 函数中:

if(gladLoadGLloader((GLADloadproc) currentContext()->getProcAddress) {}

但由于 Qt 的函数重载,这并没有奏效。当我使用

if(gladLoadGL()) {}

它也不起作用。我的包括:

#include <glad\glad.h>
#include "OpenGLViewport.h"
#include <QDebug>
#include <QOpenGLContext>

我搜索了 Google 先生,并仔细查看了 Qt 文档,但一无所获。我想使用 GLAD,这样我的渲染代码就不会太紧地绑定到 Qt,以防我以后想切换。

编辑:我的目标是在 Qt 中使用非实例化的 OpenGL 函数(尽管如果我没记错的话,文档建议不这样做)。因为那样我就可以无缝切换到 GLFW 来提供窗口等。

【问题讨论】:

  • 有什么理由不使用initializeOpenGLFunctions()
  • @Vallentin 因为我必须继承 QOpenGLFunctions 并且我所有的 gl 调用都必须被实例化..这是我严格想要避免的事情(见我的编辑)。跨度>

标签: c++ qt opengl


【解决方案1】:

从问题到答案的移动解决方案:

回答:所以事实证明我只是把一些事情搞混了,这就是我让它工作的方式,以防万一有人遇到同样的问题:

  1. 在您的项目中添加glad.c
  2. 将必要的标头添加到包含目录中
  3. QOpenGLWidget 子类的 .cpp 文件应包含以下组件:

// Subclass.cpp
#include <glad/glad.h>
// important, subclass header file after glad!!
// otherwise glad won't "hook"
#include "Subclass.h"

void Subclass::initializeGL()
{
    if(gladLoadGL()) initialized = true; // initialized is a class member here
    else; // handle errors
}

void Subclass::paintGL()
{
    if(initialized); // render here
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2014-05-30
    • 2017-03-06
    • 1970-01-01
    相关资源
    最近更新 更多