QOpenGLFunctions 似乎缺少重要的函数,例如 glInvalidateFramebuffer 和 glMapBuffer。据我了解,QOpenGLFunctions 加载桌面 OpenGL 函数和 ES 函数的交集。如果是这样的话,为什么这两个功能不存在呢?据我所知,glMapBuffer 两者都存在。
我是否误解了 QOpenGLFunctions,或者它们实际上缺少函数(不太可能)?
QOpenGLFunctions
只是公开了 OpenGL 2 (+FBO) 和 OpenGL ES 2 的公共子集。这就是为什么你的功能不存在的原因。glMapBuffer
在 OpenGL 2 中,但不在 ES 2 中(但有 OES 扩展);glInvalidateFramebuffer
是在 OpenGL 4.3 中。
如果您需要除公共子集之外的任何其他功能,您可以:
从 Qt 5.6 开始,使用QOpenGLExtraFunctions
,它针对 OpenGL ES 3.0 / 3.1 API(以及桌面 OpenGL 上的粗略等效功能)。因此,它确实兼具了两者glMapBuffer
and glInvalidateFramebuffer
.
自己解决 via QOpenGLContext::getProcAddress
-
use QOpenGLContext::versionFunctions<T>()
例如,获取包含给定 OpenGL 版本的所有函数的函数对象
auto functions = context->versionFunctions<QOpenGLFunctions_4_3_Core>();
if (!functions) error();
functions->initializeOpenGLFunctions();
functions->glInvalidateFramebuffer(...);
-
#include <QOpenGLExtensions>
并使用包装您需要的扩展的类,例如
auto functions = new QOpenGLExtension_ARB_invalidate_subdata;
if (!functions->initializeOpenGLFunctions()) error();
functions->glInvalidateFramebuffer(...)
包装以上内容的组合在一个类中,该类将使用给定合适 GL 版本的解析调用,或者回退到扩展,或者失败(例如:QOpenGLTexture)。
For glMapBuffer
,它实际上以某种方式暴露在外QOpenGLBuffer
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)