PySide6.QtOpenGL.QAbstractOpenGLFunctions¶
- class QAbstractOpenGLFunctions¶
QAbstractOpenGLFunctions
类是一个类族的基类,该类族暴露了每个 OpenGL 版本和配置文件的所有函数。更多…概要¶
方法¶
def
__init__()
def
isInitialized()
def
owningContext()
虚拟方法¶
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
不同平台上的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定义了两个配置:核心和兼容性。
核心配置文件不包括在OpenGL 3.1中移除的任何函数。兼容性配置文件包含相同版本核心配置文件中的所有函数,以及在OpenGL 3.1中移除的所有函数。通过这种方式,兼容性配置文件类允许使用较新的OpenGL功能,同时也允许您继续使用旧的OpenGL代码。对于新的OpenGL代码,应优先使用核心配置文件。
请注意,一些供应商,特别是苹果,没有实现兼容性配置文件。因此,如果您希望在macOS上使用新的OpenGL功能,则应确保通过QSurfaceFormat::setProfile()请求核心配置文件上下文。
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
。指向与当前使用的OpenGL版本和配置文件相对应的类对象的指针可以从
get()
获取。如果以这种方式获取,请注意QOpenGLContext保留对象的所有权。这是为了实例可以被缓存和共享。在调用任何暴露的OpenGL函数之前,您必须确保对象已解析了OpenGL函数的函数指针。每个实例只需使用initializeOpenGLFunctions()执行一次。一旦初始化,该对象可用于调用相应版本和配置文件的任何OpenGL函数。请注意,在某些情况下initializeOpenGLFunctions()可能会失败,因此请检查返回值。初始化可能失败的情况是,如果您有一个版本或配置文件的函数对象,其中包含的函数不属于用于解析函数指针的上下文。
如果你只使用函数对象,那么当你尝试使用该版本和配置文件中未包含的函数时,你将得到编译时错误。这显然比在运行时出现未定义行为要容易调试得多。
另请参阅
- __init__()¶
构造一个
QAbstractOpenGLFunctions
对象。- initializeOpenGLFunctions()¶
- Return type:
布尔
- isInitialized()¶
- Return type:
布尔
- owningContext()¶
- Return type:
- setOwningContext(context)¶
- Parameters:
上下文 –
QOpenGLContext