PySide6.QtOpenGL.QAbstractOpenGLFunctions

class QAbstractOpenGLFunctions

QAbstractOpenGLFunctions 类是一个类族的基类,该类族暴露了每个 OpenGL 版本和配置文件的所有函数。更多

概要

方法

虚拟方法

注意

本文档可能包含从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()可能会失败,因此请检查返回值。初始化可能失败的情况是,如果您有一个版本或配置文件的函数对象,其中包含的函数不属于用于解析函数指针的上下文。

如果你只使用函数对象,那么当你尝试使用该版本和配置文件中未包含的函数时,你将得到编译时错误。这显然比在运行时出现未定义行为要容易调试得多。

另请参阅

get()

__init__()

构造一个QAbstractOpenGLFunctions对象。

initializeOpenGLFunctions()
Return type:

布尔

isInitialized()
Return type:

布尔

owningContext()
Return type:

QOpenGLContext

setOwningContext(context)
Parameters:

上下文QOpenGLContext