gpt4 book ai didi

c++ - 如何在 Qt5 中使用像 glGenBuffersARB 这样的扩展?

转载 作者:行者123 更新时间:2023-11-28 02:00:51 25 4
gpt4 key购买 nike

我拼命想了解 Qt5OpenGL 支持的架构。

我当前的问题是:我有一些现有的 OpenGL 代码(桌面,不是 OpenGL ES)使用了一些 OpenGL 扩展,包括 glGenBuffersARB。在 Qt5 之外访问像这样的扩展功能是微不足道的,例如通过使用 GLEW 我可以简单地这样做:

glewInit();

一切都会像预期的那样神奇地工作,我可以立即开始使用 glGenBuffersARB。如果我担心的话,我可以调用 glewIsSupported 来确保它得到支持。

但在 Qt5 中有一个警告,即 GLEW 和 QOpenGLFunctions 不能很好地协同工作(从 qopenglfunctions.h 复制):

#ifdef __GLEW_H__
#if defined(Q_CC_GNU)
#warning qopenglfunctions.h is not compatible with GLEW, GLEW defines will be undefined
#warning To use GLEW with Qt, do not include <qopengl.h> or <QOpenGLFunctions> after glew.h
#endif
#endif

所以假设我为了这个问题和满足好奇心沟 GLEW 完全依赖 Qt5 纯 Qt5 方法。在不手动绑定(bind)每个扩展函数的情况下,如何让依赖 glGenBuffersARB 的现有 OpenGL 代码工作?

注意:我知道我可以按照 this 中的提示进行操作回答并这样做:

auto functions = context->versionFunctions<QOpenGLFunctions_3_3_Core>();
if (!functions) error();
functions->initializeOpenGLFunctions();
functions->glGenBuffersARB(...);

但这样一来,我就不得不在现有 OpenGL 代码的每一行前加上 functions-> 前缀,而我不想这样做。

最佳答案

But then I would have to prefix every single line of existing OpenGL code with functions-> which I would rather not do.

您当然可以使用QOpenGLContext::getProcAddress 自己加载函数指针。但是 Qt 提供的唯一一个为您处理函数加载的接口(interface)是 QOpenGLFunctions_* 接口(interface)。不仅如此,它们并没有真正涵盖扩展。

您可以使用 Qt 的 OpenGL 包装器类,例如 QOpenGLBuffer 等等。但这些是最低公分母的事情。它们不会包装您可以使用现代 OpenGL 对缓冲区执行的所有操作。而且,它们不包括扩展;只有核心功能的东西。

还有很多 OpenGL 没有被这样的对象包裹,所以它并不是一个全面的解决方案。

最好坚持使用适当的 OpenGL Loading Library .

关于c++ - 如何在 Qt5 中使用像 glGenBuffersARB 这样的扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39627811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com