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和glInvalidateFramebuffer.
通过自己解决QOpenGLContext::getProcAddress
例如,用于QOpenGLContext::versionFunctions<T>()获取包含给定OpenGL版本的所有函数的函数对象
auto functions = context->versionFunctions<QOpenGLFunctions_4_3_Core>();
if (!functions) error();
functions->initializeOpenGLFunctions();
functions->glInvalidateFramebuffer(...);
Run Code Online (Sandbox Code Playgroud)#include <QOpenGLExtensions> 例如,使用包装所需扩展名的类
auto functions = new QOpenGLExtension_ARB_invalidate_subdata;
if (!functions->initializeOpenGLFunctions()) error();
functions->glInvalidateFramebuffer(...)
Run Code Online (Sandbox Code Playgroud)包装上面的组合中,将使用给定一个合适的GL版本解决了通话,或退回到扩展或失败的一类(如:QOpenGLTexture).
因为glMapBuffer,它实际上是以某种方式暴露出来的QOpenGLBuffer.
这两种情况和评论中的情况有多种原因:
1)据我所知,添加过程是有选择性的。仅添加了那些您需要手动解决的函数。
在上述glDrawArrays情况下,该功能已经可用了一段时间,无论是在桌面 OpenGL 还是支持 Qt 的 ES 中,因此不需要手动解决任何问题。
您可以立即以常规 opengl 方式使用它们,包括gl.h所有这些。
2)Qt暂时不通过该接口支持OpenGL ES 3。您前面提到的功能,glMapBuffer很glInvalidateFramebuffer可能属于这一类。它们“默认”在 OpenGL ES 2 中不可用。
如果有任何功能没有被暴露并且没有被上述原因覆盖,那么很可能是疏忽等等。
| 归档时间: |
|
| 查看次数: |
2547 次 |
| 最近记录: |