使用 QOpenGLWidget 加载 OpenGL 函数指针

Load OpenGL function pointers using glad withing a QOpenGLWidget

本文关键字:函数 指针 OpenGL 加载 QOpenGLWidget 使用      更新时间:2023-10-16

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

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

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

但这并没有成功,因为Qt的功能是重载的。当我使用

if(gladLoadGL()) {}

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

#include <gladglad.h>
#include "OpenGLViewport.h"
#include <QDebug>
#include <QOpenGLContext>

我搜索了谷歌先生,我认真地浏览了Qt文档,但一无所获。我想使用 GLAD 只是为了让我的渲染代码不会太紧地绑定到 Qt,以防我以后想切换。

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

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

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

  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
}