Qt开发:Qt GUI模块——QAbstractOpenGLFunctions类

QAbstractOpenGLFunctions类是一系列类的基类,它们公开每个OpenGL版本和配置文件的所有函数。

头文件:#include <QAbstractOpenGLFunctions>

qmake:QT += gui

开始引入:Qt5.1

被继承:QOpenGLFunctions_1_0, QOpenGLFunctions_1_1, QOpenGLFunctions_1_2, QOpenGLFunctions_1_3, QOpenGLFunctions_1_4, QOpenGLFunctions_1_5, QOpenGLFunctions_2_0, QOpenGLFunctions_2_1, QOpenGLFunctions_3_0, QOpenGLFunctions_3_1, QOpenGLFunctions_3_2_Compatibility, QOpenGLFunctions_3_2_Core, QOpenGLFunctions_3_3_Compatibility, QOpenGLFunctions_3_3_Core, QOpenGLFunctions_4_0_Compatibility, QOpenGLFunctions_4_0_Core, QOpenGLFunctions_4_1_Compatibility, QOpenGLFunctions_4_1_Core, QOpenGLFunctions_4_2_Compatibility, QOpenGLFunctions_4_2_Core, QOpenGLFunctions_4_3_Compatibility, QOpenGLFunctions_4_3_Core, QOpenGLFunctions_4_4_Compatibility, QOpenGLFunctions_4_4_Core, QOpenGLFunctions_4_5_Compatibility, QOpenGLFunctions_4_5_Core, and QOpenGLFunctions_ES2

不同平台上的OpenGL实现能够链接到可变数量的OpenGL函数,具体取决于该平台上的OpenGL ABI。 例如,在Microsoft Windows上,只有OpenGL 1.1中的功能可以在构建时链接到。 必须在运行时解析所有其他函数。 传统的解决方案是使用QOpenGLContext :: getProcAddress()或QOpenGLFunctions。 前者繁琐且容易出错,意味着直接处理函数指针。 后者仅暴露了OpenGL ES 2和桌面OpenGL常用的功能。 然而,在编写真实世界的OpenGL应用程序时,有许多新的OpenGL功能非常有用。

Qt现在提供了一系列类,它们都继承自QAbstractOpenGLFunctions,它们通过相应的成员函数公开每个核心OpenGL函数。 每个有效的OpenGL版本和配置文件组合都有一个类。 每个类遵循命名约定:

 QOpenGLFunctions_<MAJOR VERSION>_<MINOR VERSION>[_PROFILE]

对于OpenGL版本1.0到3.0,没有配置文件,导致类:

 

  • QOpenGLFunctions_1_0
  • QOpenGLFunctions_1_1
  • QOpenGLFunctions_1_2
  • QOpenGLFunctions_1_3
  • QOpenGLFunctions_1_4
  • QOpenGLFunctions_1_5
  • QOpenGLFunctions_2_0
  • QOpenGLFunctions_2_1
  • QOpenGLFunctions_3_0

其中每个类都继承自QAbstractOpenGLFunctions。

OpenGL 3.1版删除了许多已弃用的函数,从而导致更简单和通用的API。

使用OpenGL 3.2,引入了概要文件的概念。 目前为OpenGL定义了两个配置文件:核心和兼容性。

Core配置文件不包含在OpenGL 3.1中删除的任何功能。 兼容性配置文件包含相同版本的Core配置文件中的所有函数以及在OpenGL 3.1中删除的所有函数。 通过这种方式,兼容性配置文件类允许使用更新的OpenGL功能,但也允许您继续使用旧的OpenGL代码。 对于新的OpenGL代码,应首选Core配置文件。

请注意,某些供应商(尤其是Apple)未实施兼容性配置文件。 因此,如果您希望在OS X上定位新的OpenGL功能,那么您应该确保通过QSurfaceFormat :: setProfile()请求Core配置文件上下文。

Qt提供所有版本以及核心和兼容性配置文件组合的类。 OpenGL版本3.1到4.3的类是:

  • QOpenGLFunctions_3_1
  • QOpenGLFunctions_3_2_Core
  • QOpenGLFunctions_3_2_Compatibility
  • QOpenGLFunctions_3_3_Core
  • QOpenGLFunctions_3_3_Compatibility
  • QOpenGLFunctions_4_0_Core
  • QOpenGLFunctions_4_0_Compatibility
  • QOpenGLFunctions_4_1_Core
  • QOpenGLFunctions_4_1_Compatibility
  • QOpenGLFunctions_4_2_Core
  • QOpenGLFunctions_4_2_Compatibility
  • QOpenGLFunctions_4_3_Core
  • QOpenGLFunctions_4_3_Compatibility

其中每个类都继承自QAbstractOpenGLFunctions。

可以从QOpenGLContext :: versionFunctions()获得指向与正在使用的OpenGL的版本和配置文件对应的类的对象的指针。 如果以这种方式获得,请注意QOpenGLContext保留对象的所有权。 这样只需要创建一个实例。

在调用任何公开的OpenGL函数之前,必须确保对象已经解析了OpenGL函数的函数指针。 这只需要使用initializeOpenGLFunctions()为每个实例执行一次。 初始化后,该对象可用于调用相应版本和配置文件的任何OpenGL函数。 请注意,initializeOpenGLFunctions()在某些情况下可能会失败,因此请检查返回值。 初始化失败的情况是,如果您的版本或配置文件的函数对象包含的函数不是用于解析函数指针的上下文的一部分。

如果您专门使用函数对象,那么如果您尝试使用该版本和配置文件中未包含的函数,则会出现编译时错误。 这显然比运行时的未定义行为更容易调试。

 

 

一、成员函数

[protected] QAbstractOpenGLFunctions::QAbstractOpenGLFunctions()

构造一个QAbstractOpenGLFunctions对象。

 

[virtual] QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions()

销毁QAbstractOpenGLFunctions对象。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值